REST API
Scheduling
Send at a set time with send_after, or at the same clock time in each device's own time zone with delayed_option.
Without send_after, a call starts the send at once and Xulo finishes it in the background.
At a set time
{
"send_after": "2026-11-02T09:00:00Z"
}
send_after is a date and time. Include the offset, such as Z or +03:00. The call returns 200 with status: "scheduled", and the push goes out when that time arrives. Due sends are checked every minute. When the time arrives, a segment or tag send goes out in the background like a send made now, in chunks of 500 and at the throttle_rate_per_minute you set.
A time more than a minute in the past returns 422 with "That time has already passed." A value that is not a time returns 422 with "send_after needs a time."
At the same clock time on each device
{
"send_after": "2026-11-02T09:00:00Z",
"delayed_option": "timezone"
}
With delayed_option: "timezone", Xulo reads the date and the clock time of send_after in UTC and sends at that clock time in each device's own time zone. The example sends at 09:00 local time on 2 November, everywhere.
- The time zone is the device setting, which the SDK reports. It is not guessed from location or the IP address.
- A device with no time zone is not sent to, and it is not counted in
skipped. - Xulo checks every minute. When the clock in a time zone reaches that time on that date, the whole audience in that time zone gets it, sent in the background.
- A time zone whose clock has already passed that time on that date gets it at the next check.
- Each time zone is sent once. The send stays
scheduleduntil every time zone in its audience has been sent, then it isapproved. throttle_rate_per_minutedoes not apply to a local-time send.
Any other delayed_option returns 422 with "delayed_option is timezone, or leave it out."
Checking a scheduled send
Notification stats shows remaining: the devices in the audience that have not been sent to yet.