Basic scheduling
Schedule a message by including theschedule_at parameter in your request:
schedule_at parameter must be:
- In RFC3339 format with timezone
- In the future (past times will be rejected)
- Within the allowed scheduling window (see below)
The API response will include a
schedule_at field showing when the message will actually be sent, in RFC3339 format with timezone offset. For example: "2025-10-24T04:58:02-04:00" (includes the -04:00 timezone offset).Scheduling windows
Marketing messages can be scheduled up to 90 days in advance, giving you flexibility for planning long-term campaigns.Example: Schedule a campaign 30 days in advance
Automatic compliance enforcement
When scheduling marketing messages, Prelude automatically enforces compliance rules at delivery time. If your scheduled time falls outside allowed hours or on public holidays, messages will be automatically rescheduled to the next available time slot.For detailed information about time window restrictions, public holiday handling, and automatic scheduling behavior, see the Marketing Compliance documentation.
Timezone handling
Scheduling is based on UTC time in the API, but compliance rules are enforced based on the recipient’s local timezone.1
You provide UTC time
Send your scheduled time in UTC or with a timezone offset
2
Prelude determines recipient timezone
The recipient’s timezone is determined from their phone number
3
Compliance rules are checked
Time windows and holiday restrictions are checked in the recipient’s local time
4
Automatic adjustment if needed
If the time violates rules, it’s automatically moved to the next valid slot
Example with timezone conversion
Expiration and scheduling
You can combineschedule_at with expires_at to set both when a message should be sent and when it should no longer be attempted:
Make sure
expires_at is after schedule_at. The expiration window starts from the scheduled delivery time, not from when you make the API call.Cancelling scheduled messages
Currently, scheduled messages cannot be cancelled through the API once submitted. Plan your campaigns carefully and test with small batches first.If you need to cancel a large scheduled campaign, contact Prelude support immediately.
Monitoring scheduled messages
Scheduled messages appear in your webhook events when they are actually sent:- Immediate:
transactional.message.created- Message accepted and scheduled - At delivery time:
transactional.message.pending_delivery- Message being sent - After delivery:
transactional.message.deliveredortransactional.message.failed
correlation_id field in webhooks helps you track messages across their lifecycle.
Error codes
| Error Code | Description |
|---|---|
invalid_date_format | The schedule_at timestamp format is invalid |
schedule_at_in_past | The scheduled time is in the past |
schedule_at_too_far | Scheduled time exceeds the maximum window (90 days) |
Time window violations for marketing messages don’t generate errors - they result in automatic rescheduling.