Zopping

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

ResourceRole
slotThe time-window definitions (by order type)
slot-availabilityWhat's bookable near an address, with available flags
slot-capacityRemaining capacity per slot / store / date
store-slot-rulePer-store blocks and cut-off times
slot-chargePer-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

Reference: Fulfillment & Delivery.