Receive order updates with webhooks
Set your webhook URL, check the X-API-SECRET header, read the order.updated payload and handle retries.
4 min readUpdated Developers
MiniDrop sends an order.updated notification to your HTTPS endpoint whenever an order changes: created, assigned, picked up, delivered, cancelled and so on. Build your receiver against the payload below.
Set it up#
Expose a public HTTPS endpoint that accepts
POSTwith a JSON body.In the outlet portal, open Developers. Enter your Webhook URL and, optionally, a Secret (optional). Keep Enable webhook on and press Save webhook.
On each request, verify
X-API-SECRETif you set a secret, read the payload and update your system usingorder_idorreference_order_id.Answer with a
2xxquickly. You can keep processing on your side afterwards.
For testing, the Sandbox webhook URL (optional) and Sandbox webhook secret (optional) fields are used for practice-server order updates.
The request#
MiniDrop sends POST to your URL with these headers:
Content-Type: application/jsonX-API-SECRET: <your-webhook-secret> # only if you set a secretThe delivery_charge and total_amount values in this sample are placeholders.
{ "event": "order.updated", "timestamp": "2025-02-21T10:00:30.000Z", "data": { "order_id": "550e8400-e29b-41d4-a716-446655440000", "outlet_id": "550e8400-e29b-41d4-a716-446655440001", "status": "ASSIGNED", "distance_km": 5.2, "delivery_charge": 0, "total_amount": 0, "customer_name": "Customer Name", "customer_phone": "+919876543210", "reference_order_id": "POS-12345", "delivery_executive": { "id": "550e8400-e29b-41d4-a716-446655440002", "name": "Rider Name", "phone": "+919876543210" }, "track_url": "https://minidrop.in/t/Qm3k9x_2LrT7vH1aBn0pWg" }}Field | Details |
|---|---|
| string. Always |
| string. ISO 8601 time of the webhook |
| string. MiniDrop order UUID |
| string. Your outlet UUID |
| string. Current status ( |
| number. Distance in kilometres |
| number. Base delivery charge |
| number. Amount charged to the outlet (includes tax when applicable) |
| string or null. From create order |
| string or null. From create order |
| string or null. Your POS or internal reference |
| object or null. The assigned rider |
| string or null. Customer tracking link. Always present; null until a rider is assigned |
The customer tracking link#
When a rider is assigned, the order gets a track_url. It appears in the webhook (data.track_url), in GET /api/orders/:id and in the order entries of the /api/trips responses. Send it to your customer by SMS, WhatsApp or in your app. It opens a mobile page that shows only that customer’s delivery: progress, the shop pin, the customer’s own drop pin and a short address, the rider’s first name and (if enabled for your outlet under Business profile) a Call button, and the rider’s live position and an ETA range only while the rider is on the way to that customer.
Other customers’ addresses, names, phones and positions, the pickup code and amounts are never shown.
The key is always present in the webhook. It is
nullforCREATEDorders, orders cancelled before assignment, and orders in a batch that is stillPENDING_APPROVAL.The link is stable: the same order always returns the same
track_url.The link stops working 24 hours after the order is delivered, undelivered or cancelled. The page then says it has expired.
Treat the URL as opaque. Do not parse it.
In the sandbox,
track_urlpoints at a static demo page.
For the shop side of this, see Share the live tracking link with your customer.
Delivery and retries#
Asynchronous. Order updates are never blocked by your webhook.
Retries. Up to 3 retries with backoff of 1 s, 5 s and 15 s on network errors,
5xxand408.No retry on other
4xxresponses. Return2xxwhen you accept the event.Durable. Each update is stored before it is sent, so updates and their pending retries survive a restart or deploy on MiniDrop’s side.
Idempotency. The same update may arrive more than once. Treat deliveries as idempotent.
Security#
Use HTTPS for webhook URLs.
Set a secret and reject requests whose
X-API-SECRETdoes not match.Use the separate sandbox webhook URL while testing, with the same receiver logic.
Which statuses will I receive?
The status in data.status follows the order: CREATED, ASSIGNED, PICKED_UP, DELIVERED, CANCELLED and so on. For orders created with delivery_mode: "OUTLET", ASSIGNED is sent when the outlet approves the trip.
What if my endpoint is down?
MiniDrop retries up to 3 times on network errors, 5xx and 408. If your system may miss an update, read the order again with GET /api/orders/:id.
Was this page helpful?
Related guides
Test safely in the sandbox
Use the practice server to test orders, trips and webhooks without real riders: how the simulation runs and which scenarios exist.
3 min readDevelopers
Plan and approve trips for your own riders
Turn queued OUTLET orders into trips for your online riders, approve them in one call or in the portal, and read the trips back.
3 min readDevelopers
Add and manage your riders from your system
Create, list, update and remove your own riders with the delivery-executives endpoints, and what the rider does next.
4 min readDevelopers
Get your API credentials
Create your API key in the outlet portal, hand it over safely to your software team and make a new one when needed.
3 min readDevelopers
