Schedule campaigns
Scheduled campaigns are stored with status='scheduled' and picked up by the push-scheduler cron once per minute.
Scheduling
Section titled “Scheduling”From the composer or the campaign detail page: Schedule action.
- Pick a datetime (UTC). Local timezone shown alongside for reference.
- Confirm.
- Campaign moves to
scheduledstate.
Unscheduling
Section titled “Unscheduling”- Any
scheduledcampaign can be moved back todraftfrom the detail page. - Once a campaign moves to
sentorsending, it’s too late to unschedule: you’ll need to wait for delivery.
Timezone considerations
Section titled “Timezone considerations”- Server-side scheduling is UTC.
- For “same wall clock in every user’s timezone” campaigns (e.g. “Send at 9am local everywhere”): this is not supported natively in v2. Workaround: create N campaigns, one per major TZ cluster.
Cron behavior
Section titled “Cron behavior”push-schedulerruns every minute.- Query:
push_campaigns WHERE status='scheduled' AND scheduled_at <= now(). - Failures per campaign don’t block the batch. Failed campaigns flip to
status='failed'with alast_errorstring.
API calls
Section titled “API calls”Same as Compose & send a push: schedule and unschedule are two of those endpoints.