What a delivery window is
Create a window with Create a single delivery window (POST /v1/delivery-window) and read one back with Get a delivery window (GET /v1/delivery-window/{id}). A window can define:
- A start and end time (
startTime/endTime, with*LocalandtimezoneIdvariants) — the slot the customer sees - A cutoff time (
cutoffTime) — the moment after which the window stops accepting orders and its bookings are dispatched - A maximum capacity (
maximumCapacity) — how many orders, or how much requested capacity, the window can hold - A store location (
storeLocationId) and, optionally, a zone (zoneId/zoneExternalId) - A recurrence rule (
rrule) withexceptionDates, so a window can repeat (for example, every weekday) without creating each occurrence by hand - A lead time (
leadTimeMinutes), price (priceCents), and minimum order value (minimumOrderValueCents) - Allowed tags (
allowedTags) and free-formwindowMetadata
To find the windows an order is eligible for — based on its store location and requirements — use Get eligible delivery windows for order (
GET /v1/eligible_delivery_windows). It requires an order ID (or external order ID) and a startTime/endTime range, and optionally a requestedCapacity.Booking, confirming & revoking
Reserving a window for an order is a two-phase flow keyed off your external order identifier. This lets a customer hold a slot while they finish checkout, then commit it only when the order is placed.Book
Book a delivery window for order (
POST /v1/order/external-identifier/{externalId}/delivery-window/book) reserves a window. The booking holds capacity in the window until it is confirmed or revoked. Pass the deliveryWindowId; you may also pass a requestedCapacity and an expiresAt after which an unconfirmed booking lapses.Confirm
Confirm a delivery window for order (
POST /v1/order/external-identifier/{externalId}/delivery-window/confirm) finalizes a previously booked window and commits the capacity reservation.Revoke
Revoke a delivery window for order (
POST /v1/order/external-identifier/{externalId}/delivery-window/revoke) releases the capacity reservation and disassociates the window from the order.You can also create an order and attach a delivery window in one call with Upsert order by external identifier with delivery window (
POST /v1/order/external-identifier/{externalId}/delivery-window).Capacity & shifts
Each window has a finitemaximumCapacity. Booking an order holds capacity; confirming commits it; revoking returns it to the pool. A window that has reached its capacity is no longer eligible for new bookings, which is why an eligibility check accepts a requestedCapacity — so you only see windows that can still accommodate the order.
Windows are grouped into shifts for dispatch. Orders are batched by organization, store location, pick shift name, and cutoff date, and the whole shift is dispatched together once its cutoff has passed — rather than each order being dispatched individually at order time.
The shift.dispatched event
When a shift’s cutoff passes, Nash dispatches the confirmed orders in that shift as a batch and fires the shift.dispatched webhook. Before dispatch, each order is validated: its delivery window must be confirmed, its cutoff must have passed, and the order must not already be dispatched or archived.
The webhook payload reports both the jobs that were created (created_job_ids) and any orders or jobs that failed, with per-entity error messages (errors). This lets you reconcile a whole shift in one event: successful orders are now live deliveries, and failed ones can be corrected and re-dispatched. For the full payload structure, validation rules, and worked scenarios, see the shift.dispatched event page.
Next steps
Create a delivery window
Define a bookable time slot with capacity and cutoff.
Book a window for an order
Reserve capacity for an order by external ID.
Eligible windows for order
Find the windows an order can be scheduled into.
shift.dispatched event
The webhook fired when a shift is dispatched.