> ## Documentation Index
> Fetch the complete documentation index at: https://help.retainful.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Steps

> The building blocks of every flow: actions, timing, and logic.

Steps are what an automation *does* after the trigger fires. Insert a step anywhere by clicking the **+** on a connection in the canvas. Steps fall into three groups.

## Actions

### Send Email

Sends an email to the contact. Configure the subject, sender, and content with the full [email editor](/campaigns/email-editor) — including product blocks, coupons, and [personalization](/campaigns/personalization).

### Send WhatsApp Message

Sends an approved [WhatsApp template message](/whatsapp/message-templates). Requires a connected WhatsApp Business account; only contacts with a phone number and WhatsApp opt-in receive it.

### Coupon

Generates a **unique, single-use discount code** in your store for this contact, which you can show in any later email or WhatsApp message in the flow. Full options in [Coupons](/automations/coupons).

### List Update

Adds the contact to a list or removes them from one. Useful for marking milestones ("completed welcome series") or chaining flows — joining a list can trigger another automation.

### Webhook

Sends the contact and event data to any URL you choose — notify your own systems, a Slack channel, or a third-party tool when a contact reaches this point. Details for developers: [Webhooks](/developers/webhooks).

## Timing

### Delay

Pauses the contact at this point before continuing. Three modes, which combine:

* **Relative** — wait an amount of time: 30 minutes, 2 hours, 3 days.
* **Specific time of day** — continue at, say, 9:00 AM in a timezone you pick. "Wait 1 day, then continue at 9 AM" sends the next email the following morning.
* **Specific days** — only continue on selected weekdays, so messages never land on weekends.

<Tip>
  For cart recovery, the first delay should be short — 30–60 minutes. The shopper's intent fades fast.
</Tip>

## Logic

### Binary (if/else)

Splits the flow into **Yes** and **No** paths based on a condition — contact properties, segment membership, or what's happened so far in the flow.

Classic patterns:

* **Purchased since the last email?** Yes → thank them / exit. No → send the discount.
* **Opened the first email?** Yes → softer follow-up. No → new subject line entirely.
* **VIP segment member?** Yes → bigger reward. No → standard offer.

Each branch can contain any number of further steps, including more binary splits.

## Putting it together

```text Example: post-purchase flow theme={null}
Trigger: Order placed (first order only)
  → Delay: 1 hour
  → Email: "Thanks for your order!"
  → Delay: 7 days, continue at 10 AM
  → Binary: placed a second order?
      Yes → List Update: add to "Repeat customers" → exit
      No  → Coupon: 10% off, expires in 7 days
          → Email: "Here's 10% off your next order"
```

Every step reports its own performance — see [Automation analytics](/automations/analytics).
