*Workflows › Run*

# Versions

> A workflow has a draft that you edit and a published version that runs. They are different on purpose, and the way they differ is where most surprises come from.

**Edit, publish and go live**
- You (editor) → Draft: Edit the canvas: autosave Saved after a short pause. It writes only the draft and marks it as «Unpublished changes». What runs does not change.
- You (editor) → Published version: «Publish» Freezes the draft as a new numbered version and rebuilds the triggers. New runs use it; runs already in flight keep theirs.
- «Live» on: automatic triggers (schedule, webhook, event, signal) fire and start runs of the published version
- You (editor) → Draft: «Discard» The draft goes back to the published version. There is no way back to an older one.
- You (editor) → Published version: «Run workflow» A manual run uses the published version. If the draft has unpublished changes, the editor publishes them first.

## The draft

The editor saves your changes into the draft as you work. Saving the draft changes nothing about what runs: it creates no version, moves no pointer and rebuilds no trigger. The editor tells you the draft differs with the «Unpublished changes» notice and the «Publish» and «Discard» buttons.

## Publishing

«Publish» freezes the draft as a new version, in one step: it adds the version, makes it the one that runs, clears the unpublished flag and rebuilds the schedule, webhook, event and signal lookups for the new trigger. A frozen version never changes.

- Versions are numbered 1, 2, 3 for each workflow. A workflow built from a blank page or a trigger is born published as version 1 and Live. A workflow built from a template is born as a draft, with no version and switched off.
- Two people publishing at the same moment: one gets "The workflow was modified from elsewhere at the same time; try again" (409).
- A run is bound to the version that was current when it was queued. Publishing never changes a run in flight, including one that is waiting. Editing is safe while old runs are still parked.
- A version is checked again when it runs. A version saved before the validation became stricter can fail with an invalid-definition error.

## What you can't do

> **No rollback:** There is no version history, no restore and no diff. The app does not list versions or show a version number. The only way back is Discard, which resets the draft to the version that is currently published; it cannot go further back. To return to an older shape you rebuild it by hand.

- Undo in the editor works on the draft while the editor is open. It cannot undo a publish, and it cannot recover what Discard throws away.
- The REST API shows the number and date of the published version of each workflow (`currentVersion`), and nothing else about it.
- There is no duplicate: copy a workflow by building it again or starting from a template.

## Live, paused, draft, archived

| Status | Means | Automatic triggers |
| --- | --- | --- |
| «Live» | Published and switched on. | Fire |
| «Paused» | Published and switched off. This is also what a workflow looks like after you publish a template draft. | Do nothing |
| «Draft» | Never published. | Do nothing |
| «Archived» | Hidden from the list unless you filter for it. Archiving switches it off. | Do nothing |

- The Live switch changes only that. It never creates a version, and it never publishes the draft. Switching a workflow with unpublished changes to Live runs the old version.
- Switching on needs a published version, no blank required fields, and every connected accounting integration set up. If something is missing, the app refuses with a message that says what.
- Restoring an archived workflow does not switch it back on.
- Manual runs, runs from a record and calls from other workflows do not need Live.

## Blank required fields

A draft can be saved, and even published, with required fields blank. What the engine does with them depends on the moment:

| You do | With blank required fields |
| --- | --- |
| «Publish» | Works. If the workflow was live, it is switched off at once and a toast says it was paused because fields were missing. |
| «Publish and activate» | Refused with a list of the fields, as "<step> → <field>" (422). |
| Live switch on | Refused with the same list, judged on the published version. |
| Run by hand | Allowed. The step with the blank field is likely to fail when it runs. |

A workflow that is already paused does not show the toast again when you publish.

## Test runs publish

> **A test run is a publish:** Pressing «Run workflow» in the editor first publishes the draft if it has changes. That creates a version, even though you meant only to test, and if the workflow is live with blank fields it switches it off.

## Visibility, archive and delete

- Making a workflow public is refused (409) if it has email or calendar steps, in either the draft or the published version.
- Archiving switches the workflow off. Deleting it removes it for good, with its versions and runs.
- The webhook address and secret belong to the workflow, not to a version: they do not change when you publish.

---

Canonical URL: https://docs.filmo.io/workflows/versions  
Last updated: 2026-10-09