Delivery slots & capacity
Model delivery time windows, control how much each window can take, and price them. The advanced companion to Receive & fulfill orders.
The pieces
| Resource | Role |
|---|---|
slot | The time-window definitions (by order type) |
slot-availability | What's bookable near an address, with available flags |
slot-capacity | Remaining capacity per slot / store / date |
store-slot-rule | Per-store blocks and cut-off times |
slot-charge | Per-slot pricing (surcharge / discount) |
Discover bookable slots for an address
Two calls: resolve the address to a store and zone, then read that store's slots.
# 1. Which store serves this address, and under which zone?
curl -G https://zopping.com/api/logistics-service/serviceable-area \
-H "Authorization: Bearer $ZOPPING_TOKEN" \
--data-urlencode "organizationId=<org-id>" \
--data-urlencode "address[latitude]=12.9758" \
--data-urlencode "address[longitude]=77.6096" \
--data-urlencode "address[pincode]=560001"
# → {"data":{"store":{"id":7,...},"zoneId":21,"deliveryFee":"20.00"}}
# Returns false when the address is outside all coverage.
# 2. Slots for that store
curl -G https://zopping.com/api/order-service/slot-availability \
-H "Authorization: Bearer $ZOPPING_TOKEN" \
--data-urlencode "organizationId=<org-id>" \
--data-urlencode "storeId=7" \
--data-urlencode "zoneId=21" \
--data-urlencode "searchInterval=2026-06-23T00:00:00Z/2026-06-30T00:00:00Z" \
--data-urlencode "orderType=DELIVERY"
storeId is required — there is no address-only form, which is why step 1 comes first.
Passing zoneId from step 1 is optional but saves a zone re-resolution.
searchInterval is an RFC3339 date range — <start>/<end>, not a number of days.
A plain value such as "7" is rejected with 400 invalid parameter: searchInterval.
Returns slots with date, interval and available. interval is itself an
RFC3339 range (e.g. 2026-06-23T09:00:00+05:30/2026-06-23T10:00:00+05:30).
ASAP slots instead carry a duration such as 02:00:00.
Use -G --data-urlencode rather than a hand-built query string: the [ and ] in
address[...] need encoding, and a +05:30 offset inside a raw query string decodes
as a space and fails validation. Timestamps ending in Z avoid the latter.
Zone types
Zone resolution covers polygon, radial and pincode delivery areas. Send
address[latitude] and address[longitude] in both calls; add address[pincode]
when the organization uses pincode-based zones.
Check capacity before committing
curl "https://zopping.com/api/logistics-service/slot-capacity?organizationId=<org-id>&storeId=<store-id>&orderType=DELIVERY&date=2026-06-23" \
-H "Authorization: Bearer $ZOPPING_TOKEN"
Block or set cut-offs per store
A store-slot-rule can permanently block a slot for a store or set a cut-off
(minutes before the window):
curl -X POST https://zopping.com/api/order-service/store-slot-rule \
-H "Authorization: Bearer $ZOPPING_TOKEN" -H "Content-Type: application/json" \
-d '{"organizationId":"<org-id>","storeId":"<store-id>","slotId":31,"permanentBlock":0,"cutOff":"60"}'
Price a slot
Add a surcharge for a premium window, or discount an off-peak one — globally or for a specific date:
curl -X PUT https://zopping.com/api/order-service/slot-charge/x \
-H "Authorization: Bearer $ZOPPING_TOKEN" -H "Content-Type: application/json" \
-d '{"organizationId":"<org-id>","storeId":"<store-id>","slotId":31,"surcharge":15.0}'
Going further
- Receive & fulfill orders · Multi-store & marketplace (slots are per store).
Reference: Fulfillment & Delivery.