Pickup locations
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
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
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):
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
quotes:write. pickupWindow is optional. The answer is always 200 for a valid request:
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.