Skip to main content

Flow Templates

Flow Templates are pre-built flow definitions the platform ships with every tenant. Clone one and it becomes an ordinary draft flow in your account — a working starting point you rename, edit, and publish like any flow you build yourself. The catalog lives in two places that read the same data: the Templates tab in the dashboard, and the GET /api/v1/flows/templates endpoint.

Where the catalog appears

Open the Templates tab either way:
  • Flows > Templates — the third tab on the Flows hub.
  • Deep-link — …/flows?tab=templates. The legacy /flows/templates path redirects to the tab URL, so existing bookmarks keep working.
The same catalog also surfaces inside the Flow Builder when you open it from a template card — covered in What a template gives you. The Templates tab header reads “Pre-built workflow templates to get you started quickly”, with a Create Blank Flow button beside it. Under the header:
  • Search box — matches against template name, description, and channel labels, so survey, 24h, and whatsapp are all valid queries.
  • Category chips — All, then the six categories the catalog uses: Welcome, Reminder, Survey, Nurture, Escalation, Custom.
  • Template cards — each card shows the template’s name and description, its category badge, a channel badge per channel it spans, its node count, and a schematic preview of the flow graph.
  • Incremental reveal — the gallery renders nine cards at a time; Show more grows the list toward the full catalog, and narrowing the search or category resets the window.
If the catalog fails to load, the tab offers a Retry action. Filtering to nothing offers Clear filters, which resets both search and category.

Clicking a template: what happens to the draft

Use Template on a card opens the Flow Builder with ?template=<id> in the URL. The builder fetches the template’s definition and drops its graph — canvas positions, node labels, and placeholder copy included — onto a fresh canvas as a new, unsaved draft. A few specifics that matter when you edit it:
  • Nothing is wired to your account yet. The trigger node carries a placeholder Trigger Source (for example “Schedule” on the reminder template); set it to a real number, sender, or schedule before you deploy.
  • The message copy is placeholder text. Bodys and subjects ship with {{...}} placeholders such as {{phone}} and {{otp}}; replace the sample copy with your own wording.
  • Save creates a new flow. The draft has no name or flow of its own until you save — at which point it is an ordinary flow that shares the template’s shape but no longer references it. Editing the draft later never writes back to the catalog.
  • API parity for this path: seeding a draft over the API is GET /api/v1/flows/templates (pick your template), then POST /api/v1/flows with the template’s definition as your starting graph.
If the template id doesn’t resolve (a mismatched or removed id), the builder shows a load-error state with a retry instead of a blank canvas.

API parity

The response is the standard envelope — a data array of templates, plus the usual meta (request id and timestamp). Each template object: Reads are rate-limited like the rest of the flows read surface: 60 requests per minute per API key. Callers need the flows:read scope.

A template graph, in full

Every template carries a definition — the exact graph the clone drops onto your canvas. A definition is a nodes array plus an edges array: each node has an id, a type (the node taxonomy from the Flows overview), a canvas position, and a data payload holding the node’s settings; each edge points from a source node to a target node. Here is the Welcome SMS template (tpl_welcome_sms) in full:
Two nodes, one edge — that is the whole shape you clone. Longer templates add the same two arrays: the abandoned-cart starter inserts a condition node between the trigger and the send, and its edge to the send node sets sourceHandle: "yes" to follow the condition’s true branch. The definition never contains tenant data — no real numbers, senders, or contact records — so whatever you clone starts out inert. Over the API, this is exactly the object you POST back:

Clone, customize, publish

The full path from gallery card to a live flow:
  1. Open the Templates tab — Flows > Templates, or deep-link …/flows?tab=templates. Filter by category chip or search until the starter matches your case.
  2. Select Use Template on its card. The Flow Builder opens with ?template=<id> in the URL and the template’s graph on a fresh, unsaved canvas.
  3. Set the trigger source. The trigger node carries a placeholder Trigger Source — point it at a real number, sender, or schedule. With the node selected, set the field in the node’s configuration panel. Until you do, the flow cannot fire.
  4. Rewrite the copy. Message nodes ship with placeholder body text and {{...}} variables such as {{phone}} and {{otp}}. Keep the variables your event payload fills, rewrite the surrounding wording in your voice, and delete placeholders you don’t use.
  5. Set a conversion goal (optional). If the flow drives an outcome — a reply, a confirmed appointment, a completed purchase — set the flow’s goal so flow analytics can report per-node conversion against it. Covered in Flows overview.
  6. Validate. Save the draft, then run GET /api/v1/flows/:id/validate — it flags disconnected nodes, a missing trigger, malformed branch weights, and illegal cycles before anything goes live. The full check list is in Flows overview.
  7. Publish. With a real trigger source and your own copy in place, publish from the builder. The cloned flow appears in My Flows (the first tab on the Flows hub) with status Published, and starts executing against new events.
The published flow shares the template’s shape but has no tie to the catalog — editing it never changes the gallery entry, and new catalog releases never touch your copy.

Pick a template per use case

The six category chips describe intent, but several starters sit under the Custom chip or beyond the one-example-per-category table above. Pick by what the starter actually does: Skip the gallery and build from a blank canvas when the flow is a regulated journey with tenant-specific gates — Create Blank Flow beside the gallery header starts a one-trigger canvas. Start from a template when its graph is at least half of what you want; deleting nodes is cheaper than wiring them.

Template, duplicate, or blank canvas

Three ways to start a flow, and the trade-offs differ: A template is the right starting point for a journey you have not built; a duplicate is the right one for a journey you have. Neither mutates its source — the catalog is read-only and duplicating a flow copies it.

One example per category

Every category has a built-in starter. One representative per category, with the id you’d pass to clone it: Other cataloged starters follow the same pattern — an abandoned-cart reminder, a lead-qualification score, a support FAQ deflector, and a few more.

Known limits

The catalog is platform-shipped. Three consequences:
  • No per-tenant authoring — you cannot register or save a template back into the gallery.
  • No versioning or deletion — templates don’t carry versions, and the catalog is not tenant-editable.
  • Clone, don’t upload — the supported way to keep a reusable flow shape is to own a draft shaped like it. Clone a starter with Use Template and save, or duplicate-define from a flow you already have: GET the flow, then POST /api/v1/flows with the same definition under a new name.

Next steps