delay object holds a message for later. Choose a duration, an exact timestamp, or a recurring window in the recipient’s timezone.
Prerequisites
Delay a send
1
Delay by a duration
Set
delay.duration in milliseconds to hold the message that long from now. Courier sends after exactly that interval (3600000 ms is one hour).2
Schedule for a specific time
Set
delay.until to an ISO 8601 timestamp to send at an exact moment. A date alone (2026-01-01) is midnight UTC. Include a time and offset for precision (2026-01-01T09:00:00-05:00).3
Send within a delivery window
Set Courier resolves the timezone in this order:
For an ISO
delay.until to a recurring window (opening-hours syntax) and Courier holds the message until the next time inside it. This is how you deliver during business hours or at a good local time.It is also how you enforce quiet hours, because a window is the inverse of a do-not-disturb period. A 9am to 9pm window in the recipient’s timezone says “never between 9pm and 9am”. A message arriving outside it waits rather than waking anyone.delay.timezone (highest), then to.timezone or the profile’s zoneinfo, then the profile’s timezone, then UTC. Send an array of recipients with different timezones and each one’s window is computed independently, so a single call delivers at 9 AM local for everyone. Windows accept patterns like Mo-Fr 09:00-17:00, Sa-Su 00:00-23:59, and split schedules (Mo-Fr 09:00-12:00,14:00-18:00).delay.timezone only applies to a window.For an ISO
until timestamp, the timezone is already in the timestamp. delay.timezone matters only when until is an opening-hours expression.4
Check the logs
Send with a
delay, then open the message in . A Request Delayed event shows the computed delivery time.