Skip to main content
Flows is in beta and is enabled per store. Contact Marzipan to switch it on for your account.
Flows let you automate work in your store. Each flow is built as a graph: a trigger starts the flow, conditions decide whether it continues, and actions do the work.

Triggers

A trigger is the event that starts a flow. There are currently two:
  • order.paid - an order is marked paid
  • cms.page_updated - a CMS page is updated

Actions

Actions are the steps a flow runs. You can:
  • Send a webhook
  • Send an email
  • Update an order’s status
Integrations can add their own actions too, for example Fulfil order via LCB (London City Bond) and ScrubBill.

Building a flow

Add a step from a node’s own handle to append it to the end of a branch. To put a step in the middle of a flow, hover the line between two nodes and click the + at its midpoint, then choose an action or a condition. The new step is spliced in, both sides are rewired, and the layout tidies itself up.

POS orders

Flows on the order.paid trigger skip point-of-sale orders by default. A till sale uses the shared walk-in customer, carries no delivery address, and closes as soon as it’s paid, so a delivery-shaped flow would otherwise email a placeholder record or push a counter sale to a third-party logistics provider. Turn on Include POS orders next to Active in the flow editor for flows that genuinely want every sale, such as an accounting webhook or a sales dashboard.
An order placed on hold (because it oversold, for example) doesn’t run its order.paid flows straight away. It runs them once, when the hold is released.

Conditions

Conditions let a flow decide whether to continue. For example, you can check:
  • Order total
  • Order type
  • Order market
  • Order shipping country
  • Number of items
  • Case-only
  • Contains a product type
  • Customer type

Versions and executions

Every edit you make to a flow is versioned, so you always have a history of how it has changed. You can also view the execution history for a flow, including each run’s status, result and timing. If an execution didn’t complete as expected, you can retry it.