Xulo Docs

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

JSON
{
  "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

JSON
{
  "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 scheduled until every time zone in its audience has been sent, then it is approved.
  • throttle_rate_per_minute does 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.