How flows work
flow · workflow · automation · automated email · drip campaign · journey · trigger · wait step · condition · exit event · stop when · run now · test run · A/B test in a flow · run history · Skipped · Enrolled
What it does and when to use it
Section titled “What it does and when to use it”A flow sends the right email to one person at the right moment, on its own: when they leave a cart, subscribe, order, sign up in your product, or on a date you choose. You build it once from a trigger and a few steps; from then on every person who matches goes through it at their own pace.
Use flows for anything that depends on what a person did. Use a campaign for one email to many people at once.
How it works
Section titled “How it works”Every flow starts with a trigger and ends with an End workflow step. In between, the steps run one after the other for each person.
Triggers
Section titled “Triggers”| Trigger | Starts when |
|---|---|
| Store events | Something happens in your connected shop: Order placed, Cart abandoned, New subscriber, or Customer created or updated (someone subscribed while creating a shop account). |
| Something happens in your app | Your product sends an event with that name to POST /events (for example user.signed_up). An optional filter keeps only some of them (plan = pro). |
| Schedule | A recurring time (every day, every Monday at 9:00, or any cron expression) or a one-time date, in the time zone you choose. |
| Run now | You press Run now on a published flow. |
| API / webhook | Your own system calls the flow’s trigger URL with its token and the person’s email. The same call id twice starts it once. |
A schedule or Run now reaches nobody on its own: add an Audience & filters step right after the trigger to say who enters (a segment, an uploaded list of up to 2,000 rows, or your contacts filtered by rules). The editor will not publish such a flow without it, so it can never email your whole list by accident.
| Step | What it does |
|---|---|
| Audience & filters | Decides who enters; only right after the trigger. Whoever does not match ends there. |
| Wait | Pauses one person’s path: for a while (60 minutes, 2 days), until a day and time (“Monday at 9:00”), or until they do something (kyc.completed) for at most a set time, with a Yes and a No path. |
| Condition | Splits the path by rules on the contact (fields, tags, your custom attributes), on the trigger’s event, or on whether they opened or clicked an email from this flow. |
| Sends one of your email templates. The template is copied into the flow when you publish, so editing it later does not change what a live flow sends until you publish again. | |
| Add tag | Tags the contact, for later rules and segments. |
| Webhook | Posts the contact (email, name, tags) to an HTTPS address you control, signed with the flow’s own key. |
| End workflow | The path stops here. |
Stop when…
Section titled “Stop when…”On the trigger you can list up to 10 events that end a person’s run wherever it is (“stop the trial reminders when they subscribe”). Cart reminders also stop by themselves when the cart is ordered or emptied.
Testing versions of an email
Section titled “Testing versions of an email”An Email step can test up to three versions (A, B, C): another template each, optionally under another sender name. Each person gets one at random. You choose what decides the best one (Clicks, Orders or Revenue) and whether a clearly better version is kept for everyone on its own.
Draft, publish, history
Section titled “Draft, publish, history”You edit a draft; people go through the live version until you press Publish. History lists every published version: open one read-only, restore it as the draft, or discard your draft and go back to the live one.
Test run
Section titled “Test run”Test run sends the draft through for one test contact, made up or a copy of a real one, and you follow every step in Runs. Nothing real happens: no email reaches the contact, no tag is added, no webhook is called, and waits pass instantly. You can choose what the test assumes (they opened, clicked, are in the segment, did the awaited event) and have each email also sent to your own inbox, marked [Test].
What each status means and what to do
Section titled “What each status means and what to do”Runs shows every person a flow has taken in, and what happened to them.
Run statuses
Section titled “Run statuses”| Status or reason | What it means | What you do |
|---|---|---|
Running | The run is executing its current step. | Nothing. |
Waiting | The run is at a wait step, or pausing before retrying a step that failed. | Nothing: it continues at the time shown. |
Succeeded | The run reached its end, or ended early for a reason recorded in its history. | Nothing. |
Failed | A step failed even after every retry. | Open the run's history to see which step and why. |
Terminated | Stopped from outside: the flow was unpublished or the contact was erased. | Nothing. |
Steps in a run’s history
Section titled “Steps in a run’s history”| Step | What it means |
|---|---|
Enrolled | The contact entered the flow: its trigger happened for them. |
Entered | The run arrived at a step. |
Evaluated | A condition, an audience check or a wait-for-event was decided; the history shows which way it went. |
Sent | The email step queued its email for sending. |
Tagged | A tag was added to the contact. |
WebhookCalled | The flow called your webhook address. |
Waited | A wait step was reached; the run continues at the time it shows. |
Retried | A step failed for a passing reason and will be tried again. |
Failed | A step failed after every retry; the run stops there. |
Completed | The run ended, at the end of the flow or early for the reason it shows. |
Skipped | The email step did not send: the sending gate stopped it, and the history shows the reason. |
Simulated | In a test run: what the step would have done, without doing it. |
Why a run ended early
Section titled “Why a run ended early”| Status or reason | What it means | What you do |
|---|---|---|
audience_not_matched | The contact did not fit the audience the flow is limited to, so the run ended right after the trigger. | Nothing, or widen the flow's audience. |
cart_closed | The cart the flow was about was ordered or emptied, so there was nothing left to remind anyone of. | Nothing: this is the reminder working as intended. |
exit_event | The contact did one of the things the flow stops on (for example they activated or subscribed). | Nothing. |
An email step that did not send shows the sending gate’s reason.
Events involved
Section titled “Events involved”Flows on Store events start on the facts Azimea records:
| Event | What it means | When it happens | Who sends it |
|---|---|---|---|
order.placed | Azimea recorded a new order on the contact's timeline. | When the order arrives, from any source. | Azimea |
cart.abandoned | Azimea's verdict that a cart was left: it starts the abandoned-cart flow. | 30 minutes without change, with products and an address, and no order. | Azimea |
contact.subscribed | A contact became a subscriber: a newsletter or form sign-up starts welcome flows; someone who ticked marketing while creating a shop account starts the flows on new customer accounts. | When a contact's consent becomes Subscribed. | Azimea |
Flows on Something happens in your app start on your product’s events; these names make the ready-made product flows work without changes:
| Event | What it means | When it happens | Who sends it |
|---|---|---|---|
user.signed_up | A person created an account in your product. | Right after sign-up. | Your product, through POST /events |
user.activated | A person reached the moment your product counts as "they got it" (their first project, first payment, first report). | When you decide activation happened. | Your product, through POST /events |
trial.ending | A person's trial ends soon. | A few days before the end of the trial, as you choose. | Your product, through POST /events |
subscription.started | A person started paying. | On the first successful payment. | Your product, through POST /events |
Set it up in the dashboard
Section titled “Set it up in the dashboard”- Flows › New workflow: start from a template (abandoned cart, welcome series, post-purchase follow-up, win back) or from an empty flow.
- Pick the trigger, then add steps from the library on the left; connect them on the canvas.
- Choose What it is for: Marketing, or Service message for an email that only informs (see After the order).
- Run a Test run and read it in Runs.
- Press Publish. Problems that would stop it are shown on the canvas first.
Do it from your code
Section titled “Do it from your code”Send events to POST /events, or call a flow’s trigger URL. See What you can build today.
Troubleshooting
Section titled “Troubleshooting”| Symptom | Likely cause | Fix |
|---|---|---|
| Publish is refused | A step is incomplete (no template, no tag, no HTTPS address, a schedule without an Audience step). | Fix the problems marked on the canvas. |
| Nobody enters | The flow is a draft, or the trigger never happens (no store connected, your app does not send that event yet). | Publish it; check Runs and the contact’s timeline. |
| People enter but get no email | The sending gate stopped it; the run shows the reason. | See why an email was not sent. |
| An edited template is not used | Live flows keep the copy taken at publish. | Publish the flow again. |
A run is Failed |
A step failed after every retry (often a webhook address that does not answer). | Open the run’s history for the step and the reason. |