Delivery & Zones API
County-based delivery zone lookup and fee estimation before checkout.
Base: /api/v1/delivery | X-Tenant-ID required
GET
/api/v1/delivery/zones
Public
List all active delivery zones with county coverage.
Response
{ "success": true, "data": { "zones": [ { "id","name","counties":["nairobi","kiambu"],"base_fee":200,"per_km_rate":0,"min_delivery_days":1,"max_delivery_days":3 } ] } }
POST
/api/v1/delivery/estimate
Public
Estimate delivery fee for a county. Returns zone info, estimated fee, and delivery window.
Request Body
{
"county": "mombasa", // required — lowercase Kenya county name
"coordinates": { "lat": -4.04, "lng": 39.67 } // optional — used if zone has per_km_rate > 0
}
Response
{
"success": true,
"data": {
"zone": { "id","name","base_fee": 500,"per_km_rate": 0,"min_days": 2,"max_days": 4 },
"estimated_fee": 500,
"distance_km": null,
"note": "Delivery to Coast region.",
"fee_may_change": false
}
}
Possible Errors
| Code | HTTP | When |
|---|---|---|
| NOT_FOUND | 404 | County not covered by any zone |
Admin — Delivery Zones /api/v1/admin/delivery/zones
POST
/api/v1/admin/delivery/zones
🔒 Auth Required
Create a delivery zone.
Request Body
{
"name": "Nairobi Zone", // required
"counties": ["nairobi","kiambu"], // required — array of county slugs
"base_fee": 200, // required
"per_km_rate": 0, // optional — 0 = flat rate
"min_delivery_days": 1, // optional
"max_delivery_days": 2, // optional
"notes": "Same-day available" // optional
}
Response
{ "success": true, "data": { "zone": { ... } } }