Fulfillment & Delivery
What a logistics or fulfilment partner needs: check whether an address is serviceable, read delivery areas, discover available delivery slots and their capacity, and track an order in transit. Internal trip and vehicle dispatch is not exposed here.
https://zopping.comServiceability
Given coordinates (and/or a pincode), returns the serving store, the delivery zone, and the delivery fee — or nothing if the address is outside coverage.
| Field | Type | Description |
|---|---|---|
store | objectread-only | The store that would serve this address. |
zone | objectread-only | Matched delivery area. |
zoneId | integerread-only | |
deliveryFee | stringread-only |
/api/logistics-service/serviceable-areaCheck serviceability
| Parameter | Type | Description |
|---|---|---|
organizationIdrequired | string· query | |
address[pincode] | string· query | |
address[latitude] | number· query | |
address[longitude] | number· query | |
storeId | integer· query | Restrict to a store. |
curl "https://zopping.com/api/logistics-service/serviceable-area?organizationId=<org-id>&address[pincode]=560001&address[latitude]=12.9758&address[longitude]=77.6096" \
-H "Authorization: Bearer $ZOPPING_TOKEN"{
"store": {
"id": 7,
"name": "MG Road"
},
"zoneId": 21,
"deliveryFee": "20.00"
}Delivery areas
Coverage zones for a store, defined by configType — PINCODE, BUILDING, POLYGON or RADIAL — each with a delivery fee and optional weight-based charges.
| Field | Type | Description |
|---|---|---|
id | integerread-only | |
name | string | |
storeId | integer | |
configType | enum | PINCODE · BUILDING · POLYGON · RADIAL. |
deliveryFee | string | |
pincodes | object[] | For PINCODE zones. |
latitude / longitude / endRadius | number | For RADIAL zones. |
/api/logistics-service/delivery-areaList delivery areas
| Parameter | Type | Description |
|---|---|---|
organizationIdrequired | string· query | |
storeId | string· query | |
pincode | string· query | Filter by pincode(s). |
status | string· query |
/api/logistics-service/delivery-areaCreate a delivery area
{
"organizationId": "<org-id>",
"storeId": "<store-id>",
"name": "Central",
"configType": "PINCODE",
"status": "ENABLED",
"deliveryFee": 20,
"pincodes": [
{
"pincode": "560001"
}
]
}/api/logistics-service/delivery-area/{id}Update a delivery area
| Parameter | Type | Description |
|---|---|---|
idrequired | integer· path |
/api/logistics-service/delivery-area/{id}Delete a delivery area
| Parameter | Type | Description |
|---|---|---|
idrequired | integer· path |
Slot availability
Bookable delivery or pickup slots for a store, with an available flag per slot. Resolve the store with Serviceability first — storeId is required.
DeliverySlotsextension/api/order-service/slot-availabilityGet available slots
| Parameter | Type | Description |
|---|---|---|
organizationIdrequired | string· query | |
storeIdrequired | integer· query | From Serviceability. Must be non-zero. |
searchIntervalrequired | string· query | RFC3339 range, `<start>/<end>`. Not a number of days. |
orderType | string· query | DELIVERY (default) or PICKUP. |
zoneId | integer· query | From Serviceability. Skips zone re-resolution. |
address[latitude] | number· query | |
address[longitude] | number· query | |
address[pincode] | string· query | Send this if the organization uses pincode-based zones. |
pickupLocationId | integer· query | PICKUP only; defaults to storeId. |
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 "searchInterval=2026-06-23T00:00:00Z/2026-06-30T00:00:00Z" \
--data-urlencode "orderType=DELIVERY" \
--data-urlencode "address[latitude]=12.9758" \
--data-urlencode "address[longitude]=77.6096" \
--data-urlencode "address[pincode]=560001"{
"slots": [
{
"id": 31,
"type": "STANDARD",
"interval": "2026-06-23T09:00:00+05:30/2026-06-23T10:00:00+05:30",
"date": "2026-06-23",
"orderType": "DELIVERY",
"available": true
},
{
"id": 32,
"type": "STANDARD",
"interval": "2026-06-23T10:00:00+05:30/2026-06-23T11:00:00+05:30",
"date": "2026-06-23",
"orderType": "DELIVERY",
"available": false
}
]
}Slot capacity
Remaining capacity per slot for a store, order type and date — use it to decide whether you can commit more deliveries to a window.
/api/logistics-service/slot-capacityRead slot capacity
| Parameter | Type | Description |
|---|---|---|
organizationIdrequired | string· query | |
storeId | string· query | |
orderType | string· query | DELIVERY / PICKUP. |
date | string· query | YYYY-MM-DD. |
Slots
The slot definitions themselves (time windows by order type). store-slot-rule blocks/cut-offs and slot-charge pricing are also available under order-service.
/api/order-service/slotList slots
| Parameter | Type | Description |
|---|---|---|
organizationIdrequired | string· query | |
orderType | string· query | DELIVERY / PICKUP / B2B. |
type | string· query | ASAP / STANDARD. |
storeId | string· query |
Tracking
Track an order in transit — live status, ETA and delivery-agent location. This endpoint is public: no Authorization header is required, so it can back a customer-facing “track my order” page. Track by the `trackingId` (the id param). You get the trackingId from the trip response, and from the order response when you request it with includeTrackingId=true.
| Field | Type | Description |
|---|---|---|
id | stringread-only | trackingId for this session. |
orderId | stringread-only | |
tripId | integerread-only | Delivery trip this session belongs to. |
orderLocation | objectread-only | Destination (customer) coordinates — { latitude, longitude }. |
deliveryAgentLocation | objectread-only | Live agent coordinates — { latitude, longitude }. |
deliveryAgentDetails | objectread-only | Agent { name, phone }. |
distance | numberread-only | Remaining distance to the destination, in metres. |
duration | numberread-only | ETA — remaining time to the destination, in seconds. |
googleApisKey | stringread-only | Google Maps API key for rendering the live map. |
orderDetails | objectread-only | Order summary — orderId, placedOn, status, paymentStatus, storeLocation, customerName, Items[], and completedAt (only once the order is delivered). The destination coordinates are on the top-level orderLocation, not here. |
/api/trackTrack an order
Public — no authorization required. Pass the `id` (trackingId), which you get from the trip response and from the order response (with `includeTrackingId=true`).
| Parameter | Type | Description |
|---|---|---|
idrequired | string· query | trackingId — returned in the trip response, and in the order response when `includeTrackingId=true`. |
curl "https://track.zopping.com/api/track?id=71ee1e85-9397-477e-9008-67768a3eceb8"{
"id": "71ee1e85-9397-477e-9008-67768a3eceb8",
"orderId": "ORD-55012",
"tripId": 4102,
"orderLocation": {
"latitude": 12.9718,
"longitude": 77.6412
},
"deliveryAgentLocation": {
"latitude": 12.9721,
"longitude": 77.6398
},
"deliveryAgentDetails": {
"name": "Ravi Kumar",
"phone": "9876543210"
},
"distance": 1850.5,
"duration": 420,
"googleApisKey": "AIzaSyXXXXXXXXXXXXXXXXXXXXXXXXX",
"orderDetails": {
"orderId": "ORD-55012",
"placedOn": "2026-06-20T09:12:00Z",
"status": "OUT_FOR_DELIVERY",
"paymentStatus": "PAID",
"storeLocation": {
"latitude": 12.9698,
"longitude": 77.6301
},
"customerName": "Asha Menon",
"Items": [
{
"name": "Aashirvaad Atta 5kg",
"quantity": "2"
},
{
"name": "Amul Milk 1L",
"quantity": "1"
}
]
}
}