# Campaigns

> Send an approved WhatsApp template to a list, or have an agent call one, with a per-recipient outcome for every person and a hard stop on anything you should not send.

Source: https://docs.amomic.in/campaigns/overview

---

A campaign reaches a list of people once. You choose who, you choose what they get, and the platform sends it at a pace that does not look like a blast. Then it tells you, for every single person, what happened.

If the work is *recurring* rather than one-off, such as chasing this month's AMC instalments, use [Duesly](/apps/duesly) instead. It raises each payment on its own schedule and sends the reminders as campaigns for you.

## Who can use campaigns

| | |
|---|---|
| **Plan** | Campaigns are part of the **Growth** and **Enterprise** plans. On Free and Starter the Campaigns page shows **Upgrade to unlock** and a **View plans & upgrade** button instead. Growth allows up to 5,000 recipients per campaign; see [Limits & plans](/operate/limits#campaign-recipients). |
| **Admins and the owner** | Create, launch, pause, cancel, retry, duplicate and archive campaigns, change **Sending rules**, and set up Duesly. The **Campaigns** item in the sidebar is shown to admins only. |
| **Members** | Can open a campaign page they are linked to and read its numbers, but see no action buttons and no **History**. |

## Campaign types

| Type | What it sends | Status |
|---|---|---|
| **WhatsApp broadcast** | An approved template, personalised per recipient | Available |
| **Call batch** | An agent calls each person and holds a real conversation | Available |
| **Email campaign** | — | Not available |

## Email campaigns

Not available. The type appears in the wizard greyed out, and you can't select it.

Creating one over the API returns `412` with a `details.reason` of `email_not_available`, rather than accepting a campaign that would never send.

## The Campaigns page

**Campaigns** in the sidebar opens the page every campaign starts from.

![The Campaigns page: the One-time outreach and Duesly cards, then Campaign activity with status filters and a table of campaigns](https://docs.amomic.in/screens/campaigns/list.light.webp)

*Two jobs at the top, then every campaign the workspace has run.*

**What do you need to get done?** offers two jobs:

- **One-time outreach** sends a WhatsApp broadcast or an AI call batch. **Create campaign** opens the wizard, the same as **Send a campaign** in the header.
- **Recurring collections** is Duesly. Its badge reads **Setup needed**, **Paused** or **Active** once installed, and the button reads **Set up Duesly**, **Continue setup** or **Open Duesly**.

**Campaign activity** lists campaigns, newest activity first, with **Load more** at the bottom. The line above the table counts what is sending and scheduled now, and the share of messages delivered over the last 30 days.

| Column | What it shows |
|---|---|
| **Campaign** | The name, the type, and the audience summary, for example *2,214 recipients · 35 excluded: 18 opted out, 11 duplicate, 6 unusable phone number*. |
| **Status** | The status, plus **Gradual** or **Burst** for the pace it was launched with. Burst is amber so it stands out. |
| **Progress** | How many messages or calls have gone out, of the total, and the share of the list handled so far (sent, failed or left out). A draft shows **Audience not checked**. |
| **Outcome** | The share delivered, and how many were **not sent** (failed plus skipped), or **No send failures**. |
| **Last activity** | When the campaign last changed. |

The archive icon at the end of a row appears on drafts and on campaigns that are done, stopped or cancelled.

### Statuses and filters

| Status | Meaning | Filter |
|---|---|---|
| **Draft** | Saved, never launched. | **Drafts** |
| **Scheduled** | Launched with a start time that hasn't arrived. | **Scheduled** |
| **Sending** | Working through the list a batch at a time. It stays **Sending** while it waits overnight for quiet hours to end. | **Sending** |
| **Paused** | Someone paused it. | **Paused** |
| **Done** | Every recipient reached a final outcome. | **Completed** |
| **Stopped** | Something that affects every remaining recipient went wrong. See [It stopped halfway](/campaigns/troubleshooting#it-stopped-halfway). | **Needs attention** |
| **Cancelled** | Someone cancelled it. | **All** |
| **Archived** | Moved out of the list on purpose. | **Archive** |

**All** shows everything except archived campaigns. Each filter shows its count, and the channel menu narrows the list to **WhatsApp broadcast** or **Call batch**.

![The Needs attention filter showing one Stopped WhatsApp campaign](https://docs.amomic.in/screens/campaigns/list-needs-attention.light.webp)

*Needs attention collects the campaigns that stopped on their own.*

## Building one

**Send a campaign** opens a short wizard. A WhatsApp broadcast has four steps and a call batch has five:

1. **Goal**: a name, and the type.
2. **Audience**: contacts, a tag, or an uploaded list. See [Audiences](/campaigns/audiences).
3. **Message**: a template and its placeholders, or the agent and what it should say. See [Call scripts and variables](/campaigns/call-scripts).
4. **Outcome** (call batches only): what each call should bring back. See [Call outcomes](/campaigns/outcomes).
5. **Review & send**: when and how fast, the final check, and launch.

The full walkthrough, with every field, is [Create a campaign](/campaigns/create).

## Review and launch

The last step is the only one that can refuse you, and it says exactly why. **Run the final check** saves the draft and then:

- resolves the audience, removing opt-outs, explicit channel opt-outs, duplicates, unusable numbers and anyone missing a personalised value;
- checks the channel is connected and its number is delivering, the template is approved and has its header image or video, and the audience fits your plan;
- for a call batch, checks how many calls the workspace can still place today.

Two more checks run only when you press **Send it**: that your plan allowance or prepaid credits can pay for the send, and that the channel is still on your plan. If part of the send will be paid from prepaid credits, the launch goes ahead and the campaign page notes it under **Worth knowing about this send**.

Each finding shows what happened, what to do, and a **What this means** link. While any finding blocks the launch, the panel reads **This cannot launch yet** and **Send it** stays disabled. Every refusal is listed in [Sending rules](/campaigns/sending-rules#every-refusal-and-what-it-means).

No consent statement or lawful basis is asked for. Opt-outs are enforced automatically and can't be overridden.

::: tip Confirm the count
The launch sends the recipient count you were shown. If the audience changed underneath you, such as a tag gaining members, the launch fails with *This audience now has N recipients, not M* rather than messaging a different number of people than you meant to. Run the check again and launch.
:::

## Following a running campaign

The campaign page refreshes itself while a campaign is sending or scheduled. It shows the KPI row, how much of the list has been handled, why anyone didn't get it, the per-recipient table and the history. A call batch opens on its **Outcomes** tab, with the delivery detail one tab away under **Calls & delivery**.

Every number on the page is explained in [Follow a campaign and read its results](/campaigns/results).

### Controls

The buttons in the campaign header, for admins:

| Action | Shown when | What it does |
|---|---|---|
| **Send it** | Draft | Launches the draft as saved, after the same checks the wizard runs. |
| **Pause** | Sending or scheduled | Stops sending immediately. Anything already handed to the provider is on its way; nothing new goes out. |
| **Resume** | Paused | Picks up where it stopped. Nobody already messaged is messaged again. |
| **Retry N failed** | Any campaign with failed recipients, except a cancelled one | Requeues the recipients that hit a provider or network error, up to 500 per press, and sets the campaign sending again. It does *not* retry the ones a rule skipped. |
| **Duplicate** | Always | Copies the campaign to a new draft named *(copy)*, with the start time cleared. |
| **Cancel** | Sending, scheduled, paused or stopped | Stops for good, straight away, with no confirmation. Everyone not yet reached is marked **Not sent** with the reason *Campaign cancelled*, so the totals still add up. A cancelled campaign can't be resumed or retried, only duplicated. |
| **Archive** | Draft, done, stopped or cancelled | After a confirmation, moves the campaign to **Archive**. Everything it sent is kept. A sending, scheduled or paused campaign must be cancelled first. |

::: warning Stopped campaigns
A **Stopped** campaign also shows a **Resume** button, and its banner says to fix the cause and resume. That button doesn't work today: resume only accepts paused campaigns. Fix the cause, then use **Retry N failed**, or **Duplicate** the campaign. See [It stopped halfway](/campaigns/troubleshooting#it-stopped-halfway).
:::

## A launched campaign is frozen

Once a campaign is launched, nothing on it can be edited: not the name, audience or message, and not the schedule, pace or sending hours either. You can pause, resume, cancel, retry and archive it.

This is deliberate. Editing the message mid-flight would mean half your audience got one thing and half got another. If you need something different, duplicate it and change the copy.

A saved **draft** can't be reopened in the wizard either. From its page you can **Send it** as saved, **Duplicate** it, or archive it. To change a draft, build the campaign again from **Send a campaign**, or create a new one over the API. Neither the console nor the API edits a saved draft.

## Why a recipient did not get it

Every recipient carries an outcome:

| Outcome | Meaning |
|---|---|
| **delivered** / **read** | It arrived. |
| **Not sent** | A rule left them out: opted out, already messaged today, over the weekly limit, or a value missing from their row. This is the campaign working correctly. |
| **failed** | The provider or the network refused it. Some of these are worth retrying; the page says which. |

The labels, explanations and fixes are all in [Why someone wasn't reached](/campaigns/failure-reasons).

## From your own code

Everything here is available over the API, including the pre-launch check. See [Campaigns API](/api/campaigns).
