Pull live order data from Shopify into a WhatsApp chatbot. When a customer sends their order number, your bot fetches the current status, total, and fulfilment details directly from the Shopify Admin API and replies in seconds, with no human involved.
Before following this guide, read the External API Request step foundation guide first. It explains every field in the step interface so this guide can focus on Shopify-specific values.
Shopify removed legacy private apps on 1 January 2026. The current path for internal integrations is a Custom App, created inside your store admin.
read_orders. Save.shpat_.Shopify displays the Admin API access token exactly once. If you miss it, you must uninstall and reinstall the app to generate a new one. Store it in a password manager or your WA.Expert settings immediately.
Shopify Custom Apps: help.shopify.com/en/manual/apps/app-types/custom-apps
In your WA.Expert chatbot flow, ask the customer for their order ID (e.g. "Please send your order number"). Store that in a variable, for example {{order_id}}. Then add an External API Request step with these values:
| Field | Value | Notes |
|---|---|---|
| Select Method | GET | You are reading an existing order, not creating one. |
| Request URL | https://{store}.myshopify.com/admin/api/2026-01/orders/{{{order_id}}}.json | Replace {store} with your myshopify subdomain. {{{order_id}}} is the variable from the previous chatbot step. |
| Select Auth Type | No Auth | Auth is handled by the header below, not by OAuth. |
| X-Shopify-Access-Token | shpat_xxx... | The token from Step 1. Paste it directly. Treat it like a password. |
| Content-Type | application/json | Required even on GET requests to Shopify. |
| Select Body Type | None | GET requests have no body. |
| Choose Response Type | JSON | Shopify returns structured JSON. |
The URL takes a numeric order ID (e.g. 4345499451455), not the order number customers see (e.g. #1023). If your chatbot collects the human-readable order number, you need to first search: GET /orders.json?name=%231023 then extract the id from the result before doing the single-order lookup.
A successful Shopify order response looks like this:
{
"order": {
"id": 4345499451455,
"name": "#1023",
"financial_status": "paid",
"fulfillment_status": "fulfilled",
"total_price": "1299.00",
"currency": "INR",
"created_at": "2026-06-20T10:30:00+05:30",
"shipping_address": {
"first_name": "Priya",
"city": "Mumbai"
},
"line_items": [
{
"title": "Classic Cotton Kurta",
"quantity": 2
}
]
}
}In the External API Request step, map these response paths to variables:
| Variable name | Response path | Example value |
|---|---|---|
| order_ref | order.name | #1023 |
| order_status | order.financial_status | paid |
| fulfilment_status | order.fulfillment_status | fulfilled |
| order_total | order.total_price | 1299.00 |
| customer_name | order.shipping_address.first_name | Priya |
| item_name | order.line_items[0].title | Classic Cotton Kurta |
fulfillment_status returns null if not yet dispatched, 'partial' if some items shipped, 'fulfilled' if all shipped.
If the customer messaged you first within the last 24 hours, your reply is a free service conversation. Send the order status in that same window. If you are initiating the message (e.g. proactive dispatch alert), you need an approved Utility template, which incurs a per-message charge at Meta's rate of Rs. 0.115.
A customer sends "Where is my order?" to your WhatsApp number. Here is the full flow:
1. Bot: "Please send your Shopify order ID. You'll find it in your confirmation email (it's a long number, e.g. 4345499451455)."
2. Customer replies: 4345499451455
3. Bot stores value as {{order_id}}
4. External API Request step fires:
GET https://your-store.myshopify.com/admin/api/2026-01/orders/4345499451455.json
Header: X-Shopify-Access-Token: shpat_...
5. Response mapped:
order_ref = "#1023"
order_status = "paid"
fulfilment_status = "fulfilled"
order_total = "1299.00"
customer_name = "Priya"
6. Bot replies:
"Hi Priya, here is your order summary:
Order: #1023
Status: Paid and Fulfilled
Total: Rs. 1,299.00
All items have been dispatched. Reply TRACK for shipping details."| Symptom | Likely cause | Fix |
|---|---|---|
| 401 Unauthorized | Wrong or missing token | Check X-Shopify-Access-Token header is present and the token starts with shpat_. Reinstall the app if the token was regenerated. |
| 403 Forbidden | Insufficient scope | The custom app does not have read_orders scope. Go to Settings > Apps > Develop apps, edit the app, add read_orders, reinstall. |
| 404 Not Found | Order ID does not exist | Confirm the customer sent a numeric order ID, not the # number. Add a fallback branch in your chatbot for empty responses. |
| Empty line_items array | Order has no line items (rare) | Handle gracefully: check if line_items exists before mapping item_name. |
| fulfillment_status is null | Order placed but not yet shipped | Map null to a human-readable label: if null, show 'Processing'. |
| API version error | Old version in URL | Use 2026-01 or the latest stable version. Check shopify.dev/changelog for version support dates. |
Master every field in WA.Expert's HTTP action step before building any integration.
Read foundation guide →WooCommerce REST API order lookup: consumer key auth, JSON response mapping.
Read guide →Generate a Razorpay payment link inside a WhatsApp chatbot and collect payment.
Read guide →Free trial, no credit card required. And if you ever get stuck, we are the only platform in India that answers you live on WhatsApp.