Zopping
API reference

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.

Base URLhttps://zopping.com

Serviceability

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.

Fields
FieldTypeDescription
storeobjectread-onlyThe store that would serve this address.
zoneobjectread-onlyMatched delivery area.
zoneIdintegerread-only
deliveryFeestringread-only
GET/api/logistics-service/serviceable-area

Check serviceability

Parameters
ParameterTypeDescription
organizationIdrequiredstring· query
address[pincode]string· query
address[latitude]number· query
address[longitude]number· query
storeIdinteger· queryRestrict to a store.
Request
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"
Response
{
  "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.

Fields
FieldTypeDescription
idintegerread-only
namestring
storeIdinteger
configTypeenumPINCODE · BUILDING · POLYGON · RADIAL.
deliveryFeestring
pincodesobject[]For PINCODE zones.
latitude / longitude / endRadiusnumberFor RADIAL zones.
GET/api/logistics-service/delivery-area

List delivery areas

Parameters
ParameterTypeDescription
organizationIdrequiredstring· query
storeIdstring· query
pincodestring· queryFilter by pincode(s).
statusstring· query
POST/api/logistics-service/delivery-area

Create a delivery area

Request body
{
  "organizationId": "<org-id>",
  "storeId": "<store-id>",
  "name": "Central",
  "configType": "PINCODE",
  "status": "ENABLED",
  "deliveryFee": 20,
  "pincodes": [
    {
      "pincode": "560001"
    }
  ]
}
PUT/api/logistics-service/delivery-area/{id}

Update a delivery area

Parameters
ParameterTypeDescription
idrequiredinteger· path
DELETE/api/logistics-service/delivery-area/{id}

Delete a delivery area

Parameters
ParameterTypeDescription
idrequiredinteger· 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.

Requires the DeliverySlotsextension
GET/api/order-service/slot-availability

Get available slots

Parameters
ParameterTypeDescription
organizationIdrequiredstring· query
storeIdrequiredinteger· queryFrom Serviceability. Must be non-zero.
searchIntervalrequiredstring· queryRFC3339 range, `<start>/<end>`. Not a number of days.
orderTypestring· queryDELIVERY (default) or PICKUP.
zoneIdinteger· queryFrom Serviceability. Skips zone re-resolution.
address[latitude]number· query
address[longitude]number· query
address[pincode]string· querySend this if the organization uses pincode-based zones.
pickupLocationIdinteger· queryPICKUP only; defaults to storeId.
Request
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"
Response
{
  "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.

GET/api/logistics-service/slot-capacity

Read slot capacity

Parameters
ParameterTypeDescription
organizationIdrequiredstring· query
storeIdstring· query
orderTypestring· queryDELIVERY / PICKUP.
datestring· queryYYYY-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.

GET/api/order-service/slot

List slots

Parameters
ParameterTypeDescription
organizationIdrequiredstring· query
orderTypestring· queryDELIVERY / PICKUP / B2B.
typestring· queryASAP / STANDARD.
storeIdstring· 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.

Fields
FieldTypeDescription
idstringread-onlytrackingId for this session.
orderIdstringread-only
tripIdintegerread-onlyDelivery trip this session belongs to.
orderLocationobjectread-onlyDestination (customer) coordinates — { latitude, longitude }.
deliveryAgentLocationobjectread-onlyLive agent coordinates — { latitude, longitude }.
deliveryAgentDetailsobjectread-onlyAgent { name, phone }.
distancenumberread-onlyRemaining distance to the destination, in metres.
durationnumberread-onlyETA — remaining time to the destination, in seconds.
googleApisKeystringread-onlyGoogle Maps API key for rendering the live map.
orderDetailsobjectread-onlyOrder 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.
GET/api/track

Track 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`).

Parameters
ParameterTypeDescription
idrequiredstring· querytrackingId — returned in the trip response, and in the order response when `includeTrackingId=true`.
Request
curl "https://track.zopping.com/api/track?id=71ee1e85-9397-477e-9008-67768a3eceb8"
Response
{
  "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"
      }
    ]
  }
}