# Test and schedule a campaign

> Send test emails, preview a campaign as a real contact, send it now or schedule it, cancel a schedule, and follow what happens while a campaign is sending.

Before a campaign goes out, check it in your own inbox and against real contact data. Then send it right away or pick a time. This page covers testing, scheduling, canceling a schedule and what happens while the campaign is sending, in the dashboard and with the API.

## Send a test

Test sends go to your own addresses so you can check the email in real inboxes and email clients.

1. **Open the test step.** In the campaign wizard, go to **Preview and test**.

2. **Enter addresses.** Under **Send test**, type up to 5 addresses, separated by commas, spaces or semicolons, for example `me@acme.com, colleague@acme.com`.

3. **Send.** Select **Send test**. The confirmation reads "Test email is being sent."

Test sends differ from the real campaign:

- **Merge tags use placeholder data.** `{{email}}` becomes the test address. First name, last name and custom fields are empty. To check real values, use [Preview as contact](#preview-as-a-contact).
- **The unsubscribe link doesn't unsubscribe anyone.**
- **Loads and clicks aren't tracked**, and tests don't count in the campaign's report.
- **Limits:** up to 5 addresses per test and 3 tests per minute. The campaign needs a **From email** first.
- **Sandbox workspaces** can only send tests to the account addresses of workspace members. See [Production access](/docs/workspaces/production-access/).

Test emails appear under **Email API → Emails** like other outgoing mail.

## Preview as a contact

In the same step, **Preview as contact** renders the campaign with one contact's data. Search for a contact by name or email, and the preview shows the subject and content as that person will see them, with "Previewing as" and their name above it. Switch between **Desktop** and **Mobile** to check both widths.

Use it to catch empty names, wrong custom field keys and tags that weren't replaced. See [Merge tags](/docs/campaigns/merge-tags/).

## Send now or schedule

In the **Send** step, select **Send campaign** and choose when:

| Option | What happens |
| --- | --- |
| **Immediately** | Select **Send now**. The campaign switches to **In process** and sending starts right away. |
| **Schedule** | Pick a date and time under **Schedule for** and select **Schedule**. The campaign switches to **Scheduled**. |

When you schedule:

- **The time is in your computer's time zone.** The field defaults to the next full hour. Emailit stores the time in UTC.
- **It must be in the future.** Otherwise the dialog shows "Pick a time in the future."
- **Sending starts within a minute of the time.** Emailit checks for due campaigns every minute.
- **Recipients are worked out when sending starts**, so people who join or leave your audiences in the meantime are counted correctly.
- **The campaign is locked.** Only drafts can be edited. To change a scheduled campaign, cancel the schedule first.

## Cancel a schedule

1. **Find the campaign.** On **Email Marketing → Campaigns**, open the **Scheduled** tab.

2. **Cancel.** In the row menu, or at the top of the campaign page, select **Cancel Schedule** and confirm.

The campaign goes back to **Draft** without a send time, so you can edit it and send or schedule it again. You can't cancel in the last 5 minutes before the scheduled time. The dashboard then shows "Campaign cannot be canceled less than 5 minutes before scheduled time."

## While the campaign is sending

When sending starts, Emailit selects the recipients, skips unsubscribed and suppressed addresses, and creates one email per recipient in batches. Meanwhile the campaign page shows:

- An **In process** card: "This campaign is still sending. Counts update as messages move through delivery."
- **Send progress**: the share of created emails that have left the queue, for example "1,200 of 5,000 created messages have left the unprocessed queue."
- Live counts for **Sent**, **Delivered**, **Attempted**, **Not processed**, **Bounced**, **Suppressed** and **Complained**. See [Campaign reports](/docs/campaigns/reports/#metrics).

Once every recipient email is created, the status changes to **Sent**. Delivery carries on after that: emails to servers that are temporarily unavailable are retried for up to about 21 hours, and loads and clicks keep arriving. The report updates as they do.

A campaign that has started sending can't be stopped from the dashboard, so test it before you send.

## Use the API

Send a draft right away with [Send or schedule a campaign](/docs/api-reference/campaigns/send/):

```bash
curl https://api.emailit.com/v2/campaigns/cmp_4Tq9Xv2kLm8Rw/send \
  -X POST \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
```

```json
{
  "object": "campaign",
  "id": "cmp_4Tq9Xv2kLm8Rw",
  "name": "October newsletter",
  "status": "sending",
  "message": "Campaign send initiated"
}
```

To schedule it, pass `scheduled_at` as an ISO 8601 date-time in the future. A Unix timestamp works too. Only drafts can be scheduled:

```bash
curl https://api.emailit.com/v2/campaigns/cmp_4Tq9Xv2kLm8Rw/send \
  -X POST \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "scheduled_at": "2026-10-15T09:00:00Z" }'
```

```json
{
  "object": "campaign",
  "id": "cmp_4Tq9Xv2kLm8Rw",
  "name": "October newsletter",
  "status": "scheduled",
  "scheduled_at": "2026-10-15T09:00:00Z",
  "message": "Campaign is scheduled"
}
```

| Error | Cause |
| --- | --- |
| `403` | The workspace doesn't have production access yet. |
| `422` "Invalid scheduled_at" | `scheduled_at` isn't a valid date in the future. |
| `422` "Campaign cannot be scheduled" | The campaign isn't a draft. |

[Cancel a campaign](/docs/api-reference/campaigns/cancel/) sets a `draft` or `sending` campaign to `canceled`. Emails that were already created for recipients still go out. To move a scheduled campaign back to draft, use **Cancel Schedule** in the dashboard.

Follow progress with the `campaign.scheduled`, `campaign.queued`, `campaign.sending`, `campaign.sent` and `campaign.canceled` [webhook events](/docs/webhooks/event-types/).

## Related

  - [Campaign reports](/docs/campaigns/reports/): What each metric means.
  - [Create a campaign](/docs/campaigns/create/): The full wizard.

---
Source: https://emailit.com/docs/campaigns/test-and-schedule/
