Skip to main content
The 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 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.
Courier resolves the timezone in this order: 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.