Built-in apps
Flow
Flow
Flow automates your store's routine work. A workflow waits for something to happen, such as an order coming in, a parcel being refused or stock running low. It checks the conditions you care about, then acts: it can tag the order, notify your team, book the courier, or cancel and restock.
Install it from Apps, then open Apps → Flow. Anyone can build workflows. Turning them on needs the Professional or Enterprise plan. See Plans and pricing.
The app has three tabs: Workflows, Templates and Run history.
Start from a template
Templates has ready-made workflows for cash-on-delivery stores. Installing one creates it switched off, so you can read it and change it before turning it on.
| Template | What it does |
|---|---|
| Parcel refused → tag the customer | When a parcel comes back, tags the customer cod-refuser and the order refused, so you spot them next time |
| High-value COD order → notify me | Notifies you about COD orders over Rs 10,000, so you can call and confirm them |
| Low stock → notify me and hide when sold out | Notifies you when stock drops below 5, and sets the product to draft when it runs out |
| COD confirmed → book the courier | Books the parcel as soon as the customer confirms on WhatsApp |
| No WhatsApp answer → cancel and restock | Cancels the order and puts the stock back if the customer never answers the confirmation |
| VIP after 3 orders | Tags a customer vip when they pay for their third order, and lets you know |
| Repeat refuser orders again → review | Tags the order for review and notifies you when someone who refused 2 or more parcels orders again |
| Daily summary email | Emails the store owner the day's order count and sales every evening at 9 pm |
Build a workflow
Create workflow opens the editor. A workflow is a trigger followed by steps.
Triggers
| Group | Trigger | Starts when |
|---|---|---|
| Orders | Order created | A customer places an order, at checkout or with the COD order form |
| Order paid | An order is marked paid, or its online payment comes through | |
| Order fulfilled | An order is marked fulfilled, shipped or delivered, or booked with a courier | |
| Order cancelled | An order is cancelled by staff, the customer or WhatsApp confirmation | |
| Order refunded | An order's payment is refunded | |
| COD confirmation | COD order confirmed | The customer confirms on WhatsApp, or staff mark it confirmed |
| COD order cancelled | The customer cancels on WhatsApp, or staff mark it cancelled | |
| COD confirmation unanswered | The customer didn't answer the WhatsApp confirmation in time | |
| Shipping | Parcel delivered | The courier reports the parcel delivered |
| Parcel returned | The courier reports the parcel refused or returned to you | |
| Customers | Customer created | A new customer: their first checkout, a store account, or added by staff |
| Products | Product low on stock | A product's or variant's stock drops below your threshold |
| Checkout | Checkout abandoned | A shopper left checkout after giving their details, about an hour later |
| Schedule | On a schedule | Every day or every week, at a time you choose in your store's timezone |
The COD triggers come from WhatsApp order confirmation, and the parcel triggers from Courier integration.
Steps
Add steps under the trigger. There are three kinds:
- Condition: rules that decide what runs next. Steps under Then run when the rules pass. Steps under Otherwise run when they don't. Choose whether All of these are true or Any of these is true.
- Action: something the workflow does.
- Wait: pauses the workflow for minutes, hours or days, up to 30 days, then carries on with the next step.
Conditions can nest. A workflow can have up to 50 steps, with up to 20 rules in each condition.
What conditions can check
Each trigger offers the fields that make sense for it:
- Order: number, total, subtotal, payment method, payment status, fulfilment status, shipping city and province, traffic source (Facebook, Instagram, Google, TikTok, direct), tags, item count, email, phone and date.
- Customer: name, email, phone, tags, order count, total spent, refused parcels, and customer since.
- Product: title, handle, status, stock, stock before the change, variant, tags and vendor.
- Store: name, URL, orders today and sales today.
Numbers compare with is, is not, greater than and less than, with or without or equal to. Text compares with is, is not, contains, doesn't contain, starts with, is empty and isn't empty.
Actions
| Group | Action | |
|---|---|---|
| Orders | Add order tags / Remove order tags | |
| Add order note | Adds a note to the order's timeline | |
| Cancel order | Unless it's already shipped or cancelled. Choose whether to put the stock back and email the customer | |
| Mark order fulfilled | Left alone if already fulfilled or cancelled | |
| Shipping | Book a courier | Books with the Courier integration app, using your routing rules unless you name an account. An order already booked isn't booked again |
| Customers | Add customer tags / Remove customer tags | |
| Products | Set product status | Active, or Draft to hide it |
| Notifications | Notify me | An in-app and push notification to your staff |
| Email me | To the store owner or a staff member | |
| Email the customer | From your store, if the customer gave an email address | |
| Advanced | Send a webhook | Posts the event as signed JSON to your own server |
Inserting order details into messages
Text settings, such as a notification's message or an email's subject, can include details from the trigger. Use Insert field, or type the field in double braces:
Rs {{order.total}} from {{customer.name}} in {{order.city}}
Test, turn on and watch
- Test run runs the workflow against a real order, customer or product you pick. It checks the conditions for real and records what each action would do. Nothing is changed.
- Turn on the workflow from the list or the editor. A workflow needs at least one action before it can be turned on. Turn it off to stop it for now and keep it. Delete workflow stops it and deletes its run history.
- Run history lists every run, filtered by workflow or status: Running, Waiting, Succeeded, Failed or Skipped. Open a run to see what happened step by step, with each step's input and output, and which branch each condition took.
The workflow list flags any workflow whose last run failed.
For developers: the webhook action
Send a webhook POSTs JSON to an https:// address on the public internet. Private and local addresses are refused.
Turn off Include the trigger data to leave out data.
Each request carries these headers:
| Header | |
|---|---|
X-Flow-Event | The trigger, such as order.created |
X-Flow-Delivery | The same on every retry of one delivery. Use it to ignore duplicates |
X-Flow-Timestamp | Unix seconds |
X-Flow-Signature | sha256= + hex HMAC-SHA256 of timestamp + "." + body, keyed with your signing secret |
The Signing secret must be at least 16 characters. A failed delivery is retried, except after a 4xx response other than 408 or 429.
{
"event": "order.created",
"workflow_id": "…",
"run_id": "…",
"step_id": "…",
"delivery_id": "…",
"sent_at": "2026-10-26T09:00:00Z",
"data": { "order": { "number": "1067", "total": 2599 }, "customer": { "name": "Ali" } }
}import crypto from "node:crypto";
function verify(secret, timestamp, rawBody, signature) {
const expected = "sha256=" + crypto
.createHmac("sha256", secret)
.update(timestamp + "." + rawBody)
.digest("hex");
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}Updated 26 October 2026