Platform
Chatbot Builder Bulk Messaging Team Inbox Mini CRM API & Webhooks AI Integration WhatsApp Flows
Industries
E-commerce & D2C Real Estate Education Healthcare Finance & BFSI Logistics Hospitality Retail
Integrations
Learn
Learning Hub Help & Docs Connect Guides Automation Codex Blog Message Templates
Pricing Start Free Trial →
HomeConnect › Connect Delhivery to WhatsApp
Delhivery Integration Guide · Logistics / India

Connect Delhivery to WhatsApp

Send automatic WhatsApp notifications at every Delhivery milestone: dispatched, out for delivery, delivered, and NDR. For brands with a direct Delhivery merchant account, this guide covers both the webhook push and the polling API options.

Published 23 June 2026  ·  6 min read  ·  Logistics / India
Using Shiprocket? Use the Shiprocket guide instead

This guide is for brands with a direct Delhivery merchant account. If you ship through Shiprocket (which uses multiple couriers including Delhivery), use the Shiprocket integration guide instead. Shiprocket normalises events from all couriers into one webhook format.

Delhivery sends bare 10-digit numbers: always prepend +91

The phone field in Delhivery's webhook payload is a bare 10-digit number such as 9876543210. WA.Expert requires +919876543210. Prepend +91 in your automation before mapping to the WhatsApp destination.

Two integration options

OptionHow it worksBest for
A: Webhook push (recommended)Delhivery POSTs to your WA.Expert URL on every status change. Real-time.Direct Delhivery accounts with API access.
B: Polling APIWA.Expert calls Delhivery's tracking API at intervals to check AWB status.Accounts without webhook access, or for on-demand WISMO lookups.

Option A: Webhook push (recommended)

Step 1: Get your WA.Expert webhook URL

In WA.Expert, create a new automation with an Inbound Webhook trigger. Copy the webhook URL.

Step 2: Register in Delhivery Merchant Portal

1
Log in to merchants.delhivery.com (or ucp.delhivery.com).
2
Go to Settings → API → Webhooks.
3
Add your WA.Expert webhook URL as the push endpoint for tracking status updates.
4
Optionally, add an authorization header Delhivery should include in the POST (e.g. X-Secret: your-secret-value) so you can verify requests in WA.Expert.
Official docs

Delhivery API: delhivery-express-api-doc.readme.io

Step 3: Understand the webhook payload

Delhivery webhook payload — out for delivery
{{
  "waybill":     "1610000000001",
  "status":      "Out for Delivery",
  "status_code": "OFD",
  "remarks":     "Shipment out for delivery",
  "timestamp":   "2026-06-24T09:30:00Z",
  "phone":       "9876543210",
  "consignee":   "Priya Sharma"
}}

Map to WA.Expert variables:
  consignee   -> customer_name
  '+91' + phone -> wa_phone    <- PREPEND +91
  waybill     -> awb
  status      -> shipment_status
  status_code -> status_code   (use for branching)
  timestamp   -> event_time

Delhivery status codes and which WhatsApp to send

status_codeFull statusWhatsApp to send
PKD / ManifestedPicked up / DispatchedDispatch notification with waybill, expected delivery, tracking link.
OFDOut for DeliveryOFD alert: 'Your order is out for delivery today. Please be available.'
DLDeliveredDelivery confirmation + review request.
UDUndelivered (NDR)NDR rescheduling prompt within 60 minutes of the event.
RTOReturn to OriginRTO notification: 'Your shipment is being returned. Contact us to rearrange.'

Branch your WA.Expert automation on status_code for reliable routing. Use status (full text) only as a display value in the message.

Option B: Polling the tracking API

If webhook push is not available on your Delhivery account, or if a customer asks for tracking status on WhatsApp, use the tracking API directly.

Delhivery tracking API call via WA.Expert External API Request step
GET https://track.delhivery.com/api/v1/packages/json/?token=YOUR_TOKEN&waybill={{awb}}&verbose=2
Authorization: Token YOUR_DELHIVERY_TOKEN

Response (simplified):
{{
  "ShipmentData": [
    {{
      "Shipment": {{
        "AWB":    "1610000000001",
        "Status": {{"Status": "Delivered", "StatusCode": "DL"}},
        "Consignee": {{"Name": "Priya Sharma", "MobileNo": "9876543210"}}
      }}
    }}
  ]
}}

Map:
  ShipmentData[0].Shipment.Status.Status     -> status_text
  ShipmentData[0].Shipment.Status.StatusCode -> status_code
  ShipmentData[0].Shipment.Consignee.Name    -> consignee_name

Token from: Delhivery Merchant Portal → Settings → API → Generate Token
Token format: pass as query param (?token=TOKEN) AND in Authorization header.
Token auth format for Delhivery API

Delhivery uses Token not Bearer. The Authorization header must be: Authorization: Token YOUR_TOKEN. Also pass the token as a query parameter: ?token=YOUR_TOKEN. Both are needed for the tracking API.

Worked example: OFD and NDR WhatsApp automation

Automation — Delhivery webhook to WhatsApp
1. Delhivery fires OFD webhook to WA.Expert:
   waybill: '1610000000001'
   status_code: 'OFD'
   phone: '9876543210'
   consignee: 'Priya Sharma'

2. WA.Expert automation:
   wa_phone = '+91' + '9876543210' = '+919876543210'

3. Branch on status_code:
   OFD -> Send OFD template to wa_phone:
          'Hi Priya! Your Delhivery shipment 161000001
           is out for delivery today. Please be available.'

   UD -> Send NDR template within 60 minutes:
         'Hi Priya, we tried delivering your order today but
          couldn\'t reach you. Tap to reschedule your delivery.'

   DL -> Send confirmation:
         'Your order has been delivered. How was your experience?'

Troubleshooting

SymptomLikely causeFix
Webhook not firingWebhook not registered or wrong URLLog in to Delhivery Merchant Portal and confirm the webhook URL is saved. Ask your Delhivery account manager to send a test push.
WhatsApp not sendingMissing +91 prefixPrepend +91 to the phone field from Delhivery before mapping to WA.Expert.
Phone field empty in payloadPhone not stored in shipmentEnsure the customer's phone was provided when creating the Delhivery shipment. Without it, the webhook has no phone to send.
Token API returning 401Wrong auth formatDelhivery uses 'Token' not 'Bearer'. Header: Authorization: Token YOUR_TOKEN. Also include token as query param: ?token=YOUR_TOKEN.
Wrong template sentNot branching on status_codeUse status_code (OFD, DL, UD, PKD) for branching, not the status text string which can vary slightly.
Works with Delhivery Express but not SurfaceSame integration appliesThe webhook format and status codes are identical across Delhivery Express, Surface, and Reverse services.

Common questions

Shiprocket or Delhivery direct?
+
Use this guide for a direct Delhivery merchant account. Use the Shiprocket guide if you ship through Shiprocket, which normalises events across multiple couriers into one webhook.
What auth does Delhivery use?
+
Token-based. Header: Authorization: Token YOUR_TOKEN (not Bearer). For the polling API, also pass as a query param: ?token=YOUR_TOKEN.
Why isn't the WhatsApp sending?
+
Most likely the bare phone number. Delhivery sends 9876543210. WA.Expert needs +919876543210. Prepend +91.
Key Delhivery status codes?
+
PKD/Manifested (dispatched), OFD (out for delivery), DL (delivered), UD (undelivered/NDR), RTO (return to origin). Branch on status_code.
What if phone is missing from payload?
+
Phone is only in the webhook if provided during shipment creation. Ensure your OMS passes the phone when creating Delhivery shipments.
Does this work for Delhivery reverse logistics?
+
Yes. Same status codes and webhook format across Express, Surface, and Reverse.

Connect Shiprocket to WhatsApp

Shiprocket: multi-courier normalised webhooks for 17+ couriers.

Read guide →

Connect WooCommerce to WhatsApp

Order and shipping notifications from WooCommerce stores.

Read guide →

External API Request Step

Master every field in WA.Expert's HTTP action step.

Read foundation guide →

Connect Delhivery to WhatsApp today

Free trial, no credit card. If you get stuck, we answer live on WhatsApp.

Start Free Trial → Book a Demo
1