Skip to main content

Scheduled Orders

Scheduled orders allow customers to place orders ahead of time for future fulfillment. Our system supports three different approaches to handling scheduled orders, depending on how your platform manages order timing and preparation.

Order Fields for Scheduled Orders

When working with scheduled orders, these fields in the NewOrder object are particularly important:

  • is_future_order - Set to true when the order is a scheduled order
  • status - Set to scheduled when the order is a scheduled order
  • estimated_ready_at_ms - The estimated time when the order should be ready for pickup/delivery, in epoch milliseconds

3 Approaches to Scheduled Orders

1. DSP Managed Timing

In this approach, your platform handles all the timing logic internally and only sends us the order when it should begin preparation.

How it works:

  1. Customer places a scheduled order on your platform.
  2. Your platform calculates prep time and holds the order internally.
  3. When it's time to start preparation, your platform sends the order via webhook.
    note

    When sending the order webhook, is_future_order would be false.

  4. We immediately confirm the order and begin preparation.

2. Stream-Managed Timing

In this approach, you send us the complete scheduled order information, and we ingest the order into the POS system immediately.

How it works:

  1. Customer places a scheduled order on your platform.
  2. Your platform sends us the complete order with is_future_order: true, and estimated_ready_at_ms.
  3. We internally manage the delay until the appropriate preparation time.
  4. When it's time to prepare, we automatically confirm the order and begin preparation.

3. Stream-Managed Timing (Scheduled)

In this approach, you send us the complete scheduled order information, and we handle the timing delay internally.

How it works:

  1. Customer places a scheduled order on your platform.
  2. Your platform sends us the complete order with is_future_order: true, status: scheduled and estimated_ready_at_ms.
  3. We internally manage the delay until the appropriate preparation time.
  4. When it's time to prepare, we automatically confirm the order and begin preparation.

Adjusting Scheduled Orders

While a scheduled order is held by Stream (before it is sent to the merchant's POS for preparation), you can update it by sending an order_adjustment event with the full adjusted order. The held order is replaced with the adjusted details, and the adjusted order is what gets submitted to the POS at preparation time.

  • The scheduled preparation time is retained unless the adjustment changes estimated_ready_at_ms.
  • Re-state status: scheduled, is_future_order: true and estimated_ready_at_ms on the adjusted order — if omitted, the order is treated as an ASAP order and is prepared immediately.
  • If the adjustment arrives after the order has already been sent to the POS, it is not applied automatically; the merchant is notified so they can update the order on their POS.