Ship a flow to production
By default, running a flow executes its live draft — the working copy that changes every time anyone hits save. That's exactly what you want while testing, and exactly what you don't want in production, where a builder's mid-day tweak shouldn't quietly change what your integration does. The fix is to publish a version and pin it.
- Publish a version
When the flow is ready to depend on, publish a version and give it a label —
1.0.0, a date, whatever fits. Publishing freezes a snapshot; the draft can keep moving without touching it. - Pin it in your integration
Tell the run endpoint to use that published version instead of the draft, with the
sourcefield:{ "source": { "kind": "published", "version": "1.0.0" } }Now every call runs exactly that snapshot.
{ "kind": "published" }with no version runs the latest published, which is convenient. Pin an explicitversionwhen you want a change to require a deliberate flip rather than going live the moment someone publishes. - Keep building safely
Edit the draft as much as you like — production is unaffected because it's pinned to a version, not the draft. Test your changes in the editor's test pane against the draft, with zero risk to what's live.
- Roll out a change
When the next version is ready: publish it (say
1.1.0), point a staging integration at1.1.0to verify it in place, then flip production's pinned version from1.0.0to1.1.0. One line changes; the rollout is deliberate. - Roll back instantly
If a new version misbehaves, re-pin the previous one. Old versions don't disappear when you publish new ones — rolling back is just pointing
source.versionat the label that worked.