See your campaigns on a color-coded monthly calendar, move between months, review what's upcoming, and reschedule or clear a campaign's slot from one place.

The Campaigns Calendar shows your campaigns on a full monthly calendar instead of a long list, so at a glance you can see what's scheduled, what's sending now, and what completed during the month. Each campaign appears as a colored chip inside its day cell, and the color reflects its status.
Every campaign is placed on its day by schedule time (scheduled_at) first, then by start time (started_at), then by completion time (completed_at). Beyond viewing, the calendar lets you reschedule any campaign directly, or clear its slot.
Access note: The page is available only after you sign in, and the data is tied to your account. The calendar shows campaigns for the currently active WhatsApp account; switch the active account and the displayed campaigns change with it. Rescheduling goes through a protected API that requires the appropriate access.
Three navigation buttons sit at the top of the page:
| Button | What it does |
|---|---|
| Previous | Goes to the earlier month |
| Today | Returns to the current month |
| Next | Goes to the following month |
The page reloads on the chosen month (in YYYY-MM form), and if you open the calendar without picking a month it starts on the current month by default. The month and year appear as a heading above the grid, in your language.
There is also a Back to campaigns list link (/campaigns) to leave the calendar view.
The calendar is a seven-column grid starting on Sunday. The leading and trailing cells are filled from the two neighboring months (shown dimmed) to complete the week rows.
Seven weekday headers run across the top of the grid, starting on Sunday and ending on Saturday, following the interface language.
Each cell shows a count badge with the day's total, then up to three chips for that day's campaigns; each chip carries the campaign's time and name in its status color. If a day has more than three campaigns, the rest collapse into a "+N more" line.
The dimmed leading and trailing cells belong to the two adjacent months (to complete the week rows), so campaigns falling on those days appear there too.
Clicking any day opens a side card listing that day's campaigns. Each item is a link to its campaign page (/campaigns/{id}) and shows:
| Field | Shown |
|---|---|
| Name | The campaign name |
| Status | A colored status pill |
| Time | ⏰ The schedule time (scheduled_at) |
| List | The recipient list name (if present) |
| Progress | Sent out of total recipients (sent / total) |
If the selected day has no campaigns, an empty-state message appears.
Alongside the calendar is an Upcoming panel that lists only campaigns whose status is scheduled and whose schedule time is in the future, sorted ascending by the soonest. Each item links to its campaign page and shows the name with its date and time. A count badge shows how many are upcoming, or an empty-state message appears when nothing scheduled lies ahead.
The calendar colors each campaign chip (plus its status dot and the legend) by one of eight statuses. This is a read-only display; status is not edited from the calendar.
| Status | Meaning |
|---|---|
Draft (draft) |
A campaign being prepared |
Scheduled (scheduled) |
Has a future send time |
Queued (queued) |
In the send queue |
Sending (sending) |
Being sent right now (its chip pulses) |
Completed (completed) |
Finished sending |
Paused (paused) |
Temporarily paused |
Failed (failed) |
Could not complete |
Cancelled (cancelled) |
Cancelled |
A legend row maps each color to its status.
Click a campaign chip inside a day cell to open the Reschedule modal. At its center is the date/time field:
| Property | Details |
|---|---|
| Field type | A date-and-time picker (datetime-local) |
| Minimum | Won't accept a time in the past (the minimum is now) |
| Initial value | The campaign's current schedule time if set, otherwise one hour from now |
After picking a time, press Save; the request goes to /api/v1/campaigns/{id}/reschedule, and on success the modal closes and the calendar reloads. The Save button is disabled while the field is empty. To close without changes, use the cancel button or click outside the modal.
From inside the reschedule modal you can clear the campaign's slot entirely. The system asks for confirmation first, then sends an empty value (scheduled_at: null) to the same endpoint to remove the schedule.
We use essential cookies to run the site. With your permission we also measure usage and ad performance. You can change this anytime. Privacy policy