Receive & fulfill orders
This guide is for channel and logistics partners that pull orders out of Zopping, move them through fulfilment, and settle payment. It uses the Orders and Fulfillment APIs.
The flow
- Poll for new orders → 2. Read the detail → 3. Advance status as you fulfil →
- Record payment / refunds → 5. Pull the invoice.
Keep your own id on each order via clientId so you can map Zopping's
referenceNumber to your system without storing extra state.
1. Poll for new orders
List orders for a store, filtered by status and a created-after window. Page with
offset/limit.
curl "https://zopping.com/api/order-service/order?organizationId=<org-id>&storeId=<store-id>&status=CONFIRMED&limit=50" \
-H "Authorization: Bearer $ZOPPING_TOKEN"
Poll incrementally — track the newest createdAt you've seen and only process
orders after it. Don't reprocess an order you've already pulled (dedupe on
referenceNumber).
Prefer push over poll. Rather than scanning, subscribe to
ORDER_CREATE/ORDER_STATUS_UPDATEand react as they fire — see Events & webhooks. Keep a low-frequency poll as a backstop.
2. Read the detail
curl "https://zopping.com/api/order-service/order/55012?organizationId=<org-id>" \
-H "Authorization: Bearer $ZOPPING_TOKEN"
The response carries items, amount, paymentStatus, the delivery address
and the chosen slot.
3. Check serviceability & slots (if you're delivering)
Before promising delivery, confirm the address is in coverage and pick a slot:
# Is this address serviceable, and from which store?
curl "https://zopping.com/api/logistics-service/serviceable-area?organizationId=<org-id>&address[pincode]=560001" \
-H "Authorization: Bearer $ZOPPING_TOKEN"
# What slots are open at the store that serves them?
# (storeId comes from the serviceable-area call above)
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"
searchInterval is an RFC3339 range (<start>/<end>), and storeId is required — see the
Delivery slots guide for the full two-call flow.
4. Advance the order status
As you pack, dispatch and deliver, update the order:
curl -X PUT https://zopping.com/api/order-service/order/55012 \
-H "Authorization: Bearer $ZOPPING_TOKEN" -H "Content-Type: application/json" \
-d '{"organizationId":"<org-id>","status":"DELIVERED"}'
5. Record payment and refunds
For cash collected on delivery, record the payment; for returns, issue a refund:
curl -X POST https://zopping.com/api/order-service/order/55012/payment \
-H "Authorization: Bearer $ZOPPING_TOKEN" -H "Content-Type: application/json" \
-d '{"organizationId":"<org-id>","orderReferenceNumber":"ORD-55012","mode":"CASH","amount":"52.00"}'
For online payments returning from a gateway, confirm with verify-payment
(see Orders → Payment verification).
6. Pull the invoice
curl "https://zopping.com/api/order-service/invoice/ORD-55012?returnPdf=true&returnHtml=true" \
-H "Authorization: Bearer $ZOPPING_TOKEN"
The response's pdfLink is a permanent, publicly readable URL — it doesn't
expire, so you can store it as-is instead of re-fetching before every use.
Good practices
- Dedupe and map on
referenceNumber/clientId; never reprocess. - Poll politely — incremental windows by
createdAt, not full scans. - Statuses are forward-only in practice; don't move an order backwards.
Next: the full Orders reference and Fulfillment reference.