delivery_window_id when placing a delivery order.delivery_window_id for any non-pickup order. Delivery windows are provider- and zone-specific — each provider defines time slots, and each slot is attached to one or more delivery zones (polygons on the map). A window is only valid for a customer if their delivery coordinates fall inside a zone that the window is attached to.lat/lng (and the active city_id) into the list of windows you can actually book.lat, lng, and the city_id it belongs to.lat, lng, and city_id as query params.from_time → to_time slots in your UI.id.is_pickup = true, delivery_window_id is not required and this endpoint does not need to be called.| Header | Required | Description |
|---|---|---|
Authorization | yes | Bearer <PUBLIC_API_KEY>. The key must hold the logistics.read permission. |
app-id | yes | Provider app ID — must match the API key's app context. |
| Param | Type | Required | Description |
|---|---|---|---|
lat | string | yes | Latitude of the customer's delivery point (decimal degrees, e.g. "24.7136"). |
lng | string | yes | Longitude of the customer's delivery point (e.g. "46.6753"). |
city_id | integer | yes | City ID the location belongs to. Must be the same city-id you use when fetching plans and placing the order. |
city_id must be consistent across plans → windows → checkout. A mismatch returns an empty list.lat / lng must fall inside one of the provider's active delivery zones for that city — otherwise the response is [] and the customer cannot place a delivery order to that point.200 OK — array of supported windows. Each entry is a window the customer can pick.[
{
"id": 12,
"from_time": "12:00:00",
"to_time": "14:00:00",
"zone": {
"id": 7,
"name": "Olaya - North"
}
},
{
"id": 18,
"from_time": "18:00:00",
"to_time": "20:00:00",
"zone": {
"id": 7,
"name": "Olaya - North"
}
}
]| Field | Type | Description |
|---|---|---|
id | integer | Delivery window ID — this is the value to send as delivery_window_id in the order payload. |
from_time | string (HH:MM:SS) | Window start time (provider's local timezone, Asia/Riyadh). |
to_time | string (HH:MM:SS) | Window end time. |
zone.id | integer | The delivery zone that matched the customer's coordinates. |
zone.name | string | Human-readable zone name (useful for support/debugging — not usually shown to the customer). |
from_time ascending, so you can render them as-is in a "pick a slot" UI.id and drop it directly into the delivery order payload:{
"delivery_window_id": 12,
"location": {
"id": 9989,
"is_corporate_location": false
},
"cart_items": [ ... ],
"is_subscription": true
}[].lat/lng is outside every active delivery zone for this provider in this city.city_id does not match the zones (e.g. coordinates are in Riyadh but city_id points to Jeddah).city_id matches the city of the coordinates.delivery_window_id is required for delivery plansid must be passed as delivery_window_id. Pickup orders should instead send is_pickup: true and pickup_branch_id.app-id header. Re-fetch using the same app-id you will use for Place Order.app-id Header403 / "api key is not valid for this app".| Method | GET |
| Path | /public-api/v1/logistics/supported-windows/ |
| Auth | Public API key (Bearer) |
| Required permission | logistics.read |
| Required headers | Authorization, app-id |
| Required query params | lat, lng, city_id |
| Returns | [{ id, from_time, to_time, zone: { id, name } }] |