Skip to main content

Pickup locations

Requires shipments:read. limit is 1–100; follow nextCursor with cursor. Captured on the sandbox (hours shortened):
code is the value for pickup.savedLocationCode. Hours are local to timezone; dayOfWeek 1 is Monday. An empty openingHours means the location can be collected at any time.

Coverage areas

Requires quotes:write. scope is UNRESTRICTED (no limit), AREAS (only the listed cities), or NONE. Each city has cityId, cityCode, nameAr, nameEn, wholeCity, and districts when only part of the city is served. No delivery company is named.

Quotes

Requires quotes:write. merchantId, destinationLatitude, and destinationLongitude are required; use the merchantId, branchId, and pickupLocationId of the location you ship from. Captured on the sandbox (route geometry shortened):
The quote is binding for 15 minutes: create the shipment with this quoteId, from the same location to the same destination, before expiresAt, and its deliveryFeeAmount is exactly price.amount, even if the tariff changes in between. One quote prices one shipment. Without quoteId, the shipment is priced at creation. durationSeconds is road travel time, not a delivery promise. A quote does not check coverage — use serviceability for that.

Serviceability

Requires quotes:write. pickupWindow is optional. The answer is always 200 for a valid request:
When serviceable is false, unavailableReasonCode is PICKUP_UNAVAILABLE, PICKUP_OUTSIDE_OPERATING_HOURS, OUTSIDE_MERCHANT_COVERAGE, or NO_PROVIDER_AVAILABLE. This is a point-in-time check; it reserves no driver and no price.