Goal: scheduled campaigns you can still stop.

Step 1. Generate a batch_id when building the campaign and include it on every message in the batch.

Step 2. Set send_at to the unix timestamp of the desired send time, within 72 hours. Per-recipient timing differences go in personalization-level send_at, which overrides the message value.

Step 3. Confirm the batch: list the scheduled batch and sanity-check count and timing before the send time.

Step 4. If a mistake is found, cancel the batch by its batch_id. Cancellation only works before the send time; after delivery starts it is too late.

Step 5. Reschedule by creating a new batch with corrected content; never reuse a cancelled batch_id.

Verify: a test batch schedules, appears in the batch list, cancels cleanly, and produces no delivered events. Pitfall: scheduling more than 72 hours out is rejected; long campaigns need rolling batches.