> ## Documentation Index
> Fetch the complete documentation index at: https://www.bolna.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Using the Workflow Editor

> A guided tour of the workflow editor: the canvas, toolbar, node catalog, validation, version history and import, for building workflows visually instead of through the API.

The workflow editor is the visual builder for creating and editing workflows in the Bolna dashboard. Everything it produces is the same [draft, version and publish](/docs/guides/workflows/introduction#the-object-model) model the API uses underneath — the canvas is just another way to edit the same definition.

***

## Opening the editor

Navigate to **Workflows** in the dashboard. Existing workflows are listed as cards showing their id, current status, and either their live version or **Draft — never published**.

<Frame caption="The Workflows list, with Create and Import in the top right">
  <img src="https://mintcdn.com/bolna-54a2d4fe/8ZNSF6wl5JAecV3m/images/workflows/editor/workflows_list_create.png?fit=max&auto=format&n=8ZNSF6wl5JAecV3m&q=85&s=1eb0158ac7b2c2b9102fc7a6754be3d1" alt="Bolna Workflows list page showing two workflow cards and Create and Import buttons in the top right" width="2526" height="716" data-path="images/workflows/editor/workflows_list_create.png" />
</Frame>

* Click **Create** to start a blank workflow. It opens directly in the editor with a single `Start` node already on the canvas.
* Click **Import** to clone an existing workflow by its id — paste the source workflow's id and optionally rename the copy.

<Frame caption="Importing a workflow by id">
  <img src="https://mintcdn.com/bolna-54a2d4fe/8ZNSF6wl5JAecV3m/images/workflows/editor/import_workflow_modal.png?fit=max&auto=format&n=8ZNSF6wl5JAecV3m&q=85&s=9dd1ad4c0486418cf5577e6a2e83d766" alt="Import workflow dialog with a Workflow ID field and an optional Name field" width="1114" height="704" data-path="images/workflows/editor/import_workflow_modal.png" />
</Frame>

***

## Editor layout

<Frame caption="A freshly created workflow, with the Start node placed and the node catalog open in the Inspector">
  <img src="https://mintcdn.com/bolna-54a2d4fe/8ZNSF6wl5JAecV3m/images/workflows/editor/new_workflow_canvas.png?fit=max&auto=format&n=8ZNSF6wl5JAecV3m&q=85&s=a9f2e3dde849e9e193c416a06b295196" alt="Workflow editor canvas showing an Untitled workflow with a Start node and the Inspector panel open on the right listing addable node types" width="2516" height="1614" data-path="images/workflows/editor/new_workflow_canvas.png" />
</Frame>

Like the [graph agent editor](/docs/graph-agent/using-the-editor), the workflow editor has a **canvas** in the centre and an **Inspector** panel on the right that opens for adding nodes, editing a selected node's config, or the panels described below. The workflow's id sits in the breadcrumb at the top, with a copy button next to it.

### Toolbar

<Frame caption="The editor toolbar">
  <img src="https://mintcdn.com/bolna-54a2d4fe/8ZNSF6wl5JAecV3m/images/workflows/editor/toolbar_overview.png?fit=max&auto=format&n=8ZNSF6wl5JAecV3m&q=85&s=1d6b23097f23c37df4c6925a7dbc24a6" alt="Workflow editor toolbar with Add node, undo, redo, search, version history, validate and Publish buttons" width="978" height="170" data-path="images/workflows/editor/toolbar_overview.png" />
</Frame>

| Button                    | Action                                                                                                                                  |
| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| **Add node**              | Opens the Inspector with the searchable node type catalog                                                                               |
| Auto-arrange (wand icon)  | Cleanly re-lays out every node on the canvas                                                                                            |
| Undo / redo               | Steps back and forward through canvas edits                                                                                             |
| Search (magnifying glass) | Searches the *nodes already on this canvas* by name or type — see [Finding a node](#finding-a-node-on-a-crowded-canvas)                 |
| History (clock icon)      | Opens [Version history](#version-history)                                                                                               |
| Validate (checkmark)      | Runs the same checks as the [Validate API](/docs/api-reference/workflows/validate) against the current draft — see [Validating](#validating) |
| **Publish**               | Freezes the draft as a new version, the same as the [Publish API](/docs/api-reference/workflows/publish)                                     |

***

## Adding a node

Click **Add node** to open the catalog in the Inspector. Nodes are grouped the same way as the node reference:

<Frame caption="The node type catalog, grouped into Core, External and Flow">
  <img src="https://mintcdn.com/bolna-54a2d4fe/8ZNSF6wl5JAecV3m/images/workflows/editor/node_type_catalog.png?fit=max&auto=format&n=8ZNSF6wl5JAecV3m&q=85&s=04ae2fc5c0cdac670a05ac1a6d90fcd4" alt="Inspector panel listing node types grouped under Core, External and Flow, each with a one-line description" width="1340" height="1454" data-path="images/workflows/editor/node_type_catalog.png" />
</Frame>

| Group    | Node types                                |
| -------- | ----------------------------------------- |
| Core     | Agent, Extraction, Wait, Retry, Condition |
| External | API request, AiSensy WhatsApp             |
| Flow     | End                                       |

Click a node type's **+** to drop it on the canvas, then connect it and open it to configure its fields — the same fields documented per type in [Workflow Nodes](/docs/guides/workflows/nodes). `Wait` here is the `time` node type in the API, and `Condition` is a branching-only node for evaluating an expression without any side effect, alongside the `cases` every other node type already carries.

### Adding a node from an existing one

Hovering a node on the canvas (or opening it in the Inspector) shows a small toolbar with three icons — duplicate, **+**, and delete:

<Frame caption="A node's hover toolbar, with duplicate, add and delete icons">
  <img src="https://mintcdn.com/bolna-54a2d4fe/8ZNSF6wl5JAecV3m/images/workflows/aisensy/select_campaign_in_inspector.png?fit=max&auto=format&n=8ZNSF6wl5JAecV3m&q=85&s=d9371b64d235d4e2b7b4c30827c55316" alt="AiSensy WhatsApp node on the canvas with a hover toolbar showing duplicate, plus and delete icons above it" width="1740" height="1460" data-path="images/workflows/aisensy/select_campaign_in_inspector.png" />
</Frame>

Clicking **+** here skips the catalog: it drops a new node already connected to that one, so you don't have to add a node from the catalog and then draw the connection yourself. This is the faster path once a graph has a few nodes in it — reach for the catalog ([above](#adding-a-node)) when you need a specific node type or the next node isn't adjacent to an existing one.

### Finding a node on a crowded canvas

Once a workflow has many nodes, use the search (magnifying glass) button to jump to one by name or type, rather than scrolling and panning:

<Frame caption="Searching nodes already placed on the canvas">
  <img src="https://mintcdn.com/bolna-54a2d4fe/8ZNSF6wl5JAecV3m/images/workflows/editor/search_nodes.png?fit=max&auto=format&n=8ZNSF6wl5JAecV3m&q=85&s=9ac119202f33a695813b46a8fd8dbf87" alt="Search nodes dropdown listing existing canvas nodes by name and type, with the validate button showing a badge of 4 unresolved issues" width="958" height="850" data-path="images/workflows/editor/search_nodes.png" />
</Frame>

***

## Validating

Click the checkmark button to validate the current draft without publishing it. A badge on the button shows the number of unresolved issues, matching the `severity: "error"` count the [Validate API](/docs/api-reference/workflows/validate) would return.

If there's no unpublished draft to check — for example, right after a fresh publish — validating says so instead of returning an empty issue list:

<Frame caption="Validating with nothing pending">
  <img src="https://mintcdn.com/bolna-54a2d4fe/8ZNSF6wl5JAecV3m/images/workflows/editor/validate_nothing_to_validate.png?fit=max&auto=format&n=8ZNSF6wl5JAecV3m&q=85&s=26c366da64c322dee396ed59484384c6" alt="Validation popup reading Nothing to validate, this workflow has no unpublished draft" width="688" height="360" data-path="images/workflows/editor/validate_nothing_to_validate.png" />
</Frame>

***

## Version history

Every publish creates a version, exactly like the [Publish API](/docs/api-reference/workflows/publish). Open **History** to see them all, newest first, with the live one marked **Current**:

<Frame caption="Version history for a published workflow">
  <img src="https://mintcdn.com/bolna-54a2d4fe/8ZNSF6wl5JAecV3m/images/workflows/editor/version_history.png?fit=max&auto=format&n=8ZNSF6wl5JAecV3m&q=85&s=2e543b86148a236e07b91a2c78e5f714" alt="Version history panel listing five versions with timestamps, the newest marked Current" width="874" height="1042" data-path="images/workflows/editor/version_history.png" />
</Frame>

Each version's menu lets you inspect or act on it without leaving the list:

<Frame caption="Actions on a past version">
  <img src="https://mintcdn.com/bolna-54a2d4fe/8ZNSF6wl5JAecV3m/images/workflows/editor/version_history_menu.png?fit=max&auto=format&n=8ZNSF6wl5JAecV3m&q=85&s=b4e5a8b0329e8efefdd8f717473374c1" alt="Version history entry context menu with View, Restore and Save as new workflow options" width="882" height="1046" data-path="images/workflows/editor/version_history_menu.png" />
</Frame>

* **View** — opens that version's definition read-only.
* **Restore** — loads it back into the current draft for further editing. This doesn't publish anything by itself; you still validate and publish the restored draft like any other edit.
* **Save as new workflow** — copies that version into a brand-new workflow, leaving this one untouched.

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Workflow Nodes" icon="circle-nodes" href="/docs/guides/workflows/nodes">
    Every node type's configuration, in detail
  </Card>

  <Card title="Quickstart" icon="rocket" href="/docs/guides/workflows/quickstart">
    Build the same workflow from the dashboard and the API, side by side
  </Card>
</CardGroup>
