> For the complete documentation index, see [llms.txt](https://codemash.gitbook.io/codemash/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://codemash.gitbook.io/codemash/cloud/emails/campaigns/schedule.md).

# Schedule a campaign

Schedule an email campaign — Send later at a date, time and time zone.

**Where:** Email → Campaigns → **Create Campaign** → **When to send: Send later** · `/projects/<project>/emails/campaigns/new`

A scheduled campaign is created now, waits as **Scheduled**, and starts by itself at the date and time you pick. Until then you can [stop it](/codemash/cloud/emails/campaigns/stop.md).

## Before you start

* Everything a campaign needs: a template with every project language, an enabled integration, recipients — see [Create a campaign and send it now](/codemash/cloud/emails/campaigns/new.md#before-you-start).
* For sends that repeat (every Monday, every month), use a scheduler task instead: [Tasks](/codemash/cloud/tasks/tasks.md).

## Steps

1. Press **Create Campaign** and fill the recipients, the template and the tokens as in [Create a campaign and send it now](/codemash/cloud/emails/campaigns/new.md#steps). Example: **All users**, template `Monthly newsletter (Marketing)`.
2. Under **Advanced settings → When to send**, pick **Send later**. Two fields appear:

   | Field         | Required | What it does                                                                 | Example                    |
   | ------------- | -------- | ---------------------------------------------------------------------------- | -------------------------- |
   | Date and time | yes      | When the campaign starts. Only future times can be picked.                   | `11/15/2026 12:00 AM`      |
   | Time zone     | yes      | The zone the date and time are read in. Your browser's zone is pre-selected. | `Europe/Vilnius UTC+03:00` |

   The button at the bottom changes from **Send** to **Schedule**.

   <figure><img src="https://712692422-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHy372bqsaex2cqS3ikhL%2Fuploads%2Fgit-blob-9619b1934ba6e3813374a7d9e5b66c25b43b54be%2Fcampaigns-schedule-1.png?alt=media" alt="When to send with Send later selected, Date and time 11/15/2026 12:00 AM, Time zone Europe/Vilnius, and the Schedule button"><figcaption><p><strong>Send later</strong> with a date, a time and a zone.</p></figcaption></figure>
3. Press **Schedule**.

## Result

You are back on the list; the campaign shows **Scheduled**. Its details page says when it will be delivered, in the zone you picked: `2026-10-06 14:01 —>Deliver 15 Nov 2026, 00:00 (Europe/Vilnius)`, and offers **Stop campaign**.

<figure><img src="https://712692422-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHy372bqsaex2cqS3ikhL%2Fuploads%2Fgit-blob-3af823e919417644e2b1f7a8747b66eb2e9f5a8d%2Fcampaigns-list-1.png?alt=media" alt="Email Campaigns list with Monthly newsletter in status Scheduled"><figcaption><p>The scheduled campaign in the list.</p></figcaption></figure>

<figure><img src="https://712692422-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHy372bqsaex2cqS3ikhL%2Fuploads%2Fgit-blob-537224b0a05a91e72be39be8da3dfca879ae5494%2Fcampaigns-schedule-3.png?alt=media" alt="Email Campaign details: Scheduled badge, Initiated 2026-10-06 13:40 Deliver 15 Nov 2026, 00:00 (Europe/Vilnius), Stop campaign button"><figcaption><p>The details page shows the planned time and its zone.</p></figcaption></figure>

At its time the campaign is checked once more (provider still enabled, template still has every project language, its creator still has the permissions it needs) and then sent. A failed check makes it **Failed** with the reason, and nothing is sent. One time, one zone: everyone gets it at that moment — not at 09:00 in each recipient's own zone (**Deliver with respect to user time zone** shows **No**).

## Change or remove it later

* A scheduled campaign cannot be edited. [Stop it](/codemash/cloud/emails/campaigns/stop.md) and create a new one (**Actions → Create new from this**).
* **Turning Email off** stops every scheduled campaign — see [Settings](/codemash/cloud/emails/settings.md).
* **Delete** — after you stop it: **Actions → Delete campaign...**.

## Do it from code

```ts
const { id } = await norbix.hub.notifications.createEmailCampaign({
  timeZoneId: 'Europe/Vilnius',
  campaign: {
    source: 'AllUsers',
    templateId: 'tmpl_6jZUZ7qXvm7AIf00JK1jOd',     // Monthly newsletter
    integrationId: 'int_6TG84uqtIL4HghyUx0EONk',
    campaignTime: Math.floor(Date.parse('2026-12-01T07:00:00Z') / 1000), // 09:00 in Vilnius
    mappedTokens: [
      { key: 'Email.SignatureId', value: 'emlsgn_2zT7jxLqeylWMYCPLzDSpm', resolver: 'Custom' },
      { key: 'Email.FooterId', value: 'emlftr_3xxahehZsa7l8kj90ytaxX', resolver: 'Custom' },
    ],
  },
});
// the campaign reads back as Scheduled, timeZoneId 'Europe/Vilnius', campaignTime 1796108400
```

```sh
norbix hub notifications email campaign create --timeZoneId Europe/Vilnius --campaign '{"source":"AllUsers","templateId":"tmpl_6jZUZ7qXvm7AIf00JK1jOd","integrationId":"int_6TG84uqtIL4HghyUx0EONk","campaignTime":1796108400,"mappedTokens":[{"key":"Email.SignatureId","value":"emlsgn_2zT7jxLqeylWMYCPLzDSpm","resolver":"Custom"},{"key":"Email.FooterId","value":"emlftr_3xxahehZsa7l8kj90ytaxX","resolver":"Custom"}]}'
```

`campaignTime` is Unix time in seconds; `timeZoneId` is the zone it was planned in.

API: [Create Email Campaign](/codemash/api-reference/notifications/email/create-email-campaign.md)
