> 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/push/campaigns/schedule.md).

# Schedule a campaign

Schedule a push campaign for a later date and time, in a time zone you pick.

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

## Before you start

* Everything a campaign sent now needs — see [Create a campaign and send it now](/codemash/cloud/push/campaigns/new.md#before-you-start).
* Decide the moment and the time zone. A scheduled campaign goes out to everyone at that one moment; it is not "09:00 in each recipient's own zone" (the details page shows **Deliver with respect to user time zone: No**).
* For a send that repeats (every Monday, every night), use a scheduler task in [Tasks](/codemash/cloud/tasks/tasks.md) instead.

## Steps

1. Fill the audience, the template and its tokens as in [Create a campaign and send it now](/codemash/cloud/push/campaigns/new.md#steps). The example sends `Appointment reminder` to `grace.hopper@example.com` (**Specified Users**) with `Time` = `09:30`.
2. Under **Advanced settings → When to send**, choose **Send later** (*Postpone the campaign: it waits as Scheduled and is sent at the date and time you pick. You can stop it until then.*).
3. Fill the two new fields and press **Schedule** (the **Send** button is renamed):

   | Field         | Required | What it does                                                                                                                                    | Example               |
   | ------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
   | Date and time | yes      | When the campaign starts. A time in the past is refused.                                                                                        | `11/15/2026 12:00 AM` |
   | Time zone     | yes      | The zone the date and time are read in; your browser's zone is picked for you. 09:00 with Europe/Vilnius is 09:00 in Vilnius, wherever you are. | `Europe/Vilnius`      |

   <figure><img src="https://712692422-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHy372bqsaex2cqS3ikhL%2Fuploads%2Fgit-blob-795a1c6922973ec60f91b5b91a355837d0f4816c%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>Send later with a date, a time and a time zone.</p></figcaption></figure>

## Result

The new row in the [campaigns list](/codemash/cloud/push/campaigns.md) has the status **Scheduled**.

<figure><img src="https://712692422-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHy372bqsaex2cqS3ikhL%2Fuploads%2Fgit-blob-dea2c43ba0c1a63d90498836aa7a5c3662bad571%2Fcampaigns-list-1.png?alt=media" alt="Push Campaigns list with Specified users Scheduled Appointment reminder at the top"><figcaption><p>The scheduled campaign in the list.</p></figcaption></figure>

Its [details page](/codemash/cloud/push/campaigns/details.md) shows the planned time in its zone under **Plan to deliver**, for example `15 Nov 2026, 00:00 (Europe/Vilnius)`, and a red **Stop campaign** button.

<figure><img src="https://712692422-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHy372bqsaex2cqS3ikhL%2Fuploads%2Fgit-blob-bce624821d2479671201948e15b6e2c499c5fa1e%2Fcampaigns-stop-1.png?alt=media" alt="Push Campaign of the scheduled campaign: Scheduled badge, Template Appointment reminder, Deliver strategy Specified users, Plan to deliver 15 Nov 2026, 00:00 (Europe/Vilnius), and the Stop campaign button"><figcaption><p>The details of a scheduled campaign.</p></figcaption></figure>

At the planned time the campaign starts by itself after one more check: the provider is still on, the template still has every project language, and the person who created it still has the permissions it needs. If a check fails, the campaign becomes **Failed** with the reason and nothing is sent.

## Change or remove it later

* **Change the time** — a scheduled campaign cannot be edited. [Stop it](/codemash/cloud/push/campaigns/stop.md) and create a new one.
* **Stop** — **Stop campaign** on its details page; a stopped campaign is never sent. Turning the Push module off in [Settings](/codemash/cloud/push/settings.md) stops it too.
* **Delete** — after it is stopped, from the **Actions** menu of its [details page](/codemash/cloud/push/campaigns/details.md#change-or-remove-it-later).

## Do it from code

`campaignTime` goes into `campaign`, in Unix **seconds** (UTC). Cloud also sends the zone as `timeZoneId`, but the TypeScript SDK 4.13.0 has no field for it, so give the time in UTC.

```ts
const sendAt = Date.UTC(2026, 10, 20, 8, 0) / 1000; // 20 Nov 2026, 08:00 UTC, in seconds
const { id } = await norbix.hub.notifications.createPushCampaign({
  campaign: {
    source: 'AllUsers',
    templateId: 'tmpl_5IStKcssvWDLtEJLJdFKvJ', // Weekend sale
    integrationId: 'int_5w5gi8BSgF9H7E76Ud6K7F',
    campaignTime: sendAt,
  },
});
console.log(id); // cmp_3c8RmBVjkHtw5aTVPUU0Zr — Scheduled
```

```sh
norbix hub notifications push campaign create --campaign '{"source":"AllUsers","templateId":"tmpl_5IStKcssvWDLtEJLJdFKvJ","integrationId":"int_5w5gi8BSgF9H7E76Ud6K7F","campaignTime":1795593600}'
```

The client setup is on the [Push page](/codemash/cloud/push.md#use-it-from-code). API: [Create Push Campaign](/codemash/api-reference/notifications/push/create-push-campaign.md)
