Pull live order data from your Webflow eCommerce store into a WhatsApp chatbot. When a customer sends their order ID, your bot calls the Webflow Data API v2, fetches the current status and total, and replies without any manual effort.
Before following this guide, read the External API Request step foundation guide. It explains every field in the step interface so this guide can stay focused on Webflow-specific values.
If you have an older integration, any v1 tokens and v1 endpoints no longer work. This guide uses the current Webflow Data API v2 only. Regenerate your token and update endpoints if migrating from v1.
Webflow uses site-scoped Bearer tokens for the v2 API. You generate one from inside your Webflow site settings.
Webflow shows your API token exactly once at generation. Copy it before navigating away. If lost, delete the token and generate a new one from Site Settings.
Webflow API token generation: developers.webflow.com/data/reference/authentication
The Site ID is needed in the order lookup URL. The quickest way to get it is a one-time API call with your new token:
GET https://api.webflow.com/v2/sites
Authorization: Bearer YOUR_API_TOKEN
Response (abbreviated):
{
"sites": [
{
"id": "6437e5c9fa5d3b7a7c1b0001",
"displayName": "My Webflow Store",
"shortName": "my-webflow-store"
}
]
}
Copy the "id" value. That is your Site ID.In your WA.Expert chatbot flow, collect the customer's Webflow order ID and store it as {{order_id}}. Then add an External API Request step:
| Field | Value | Notes |
|---|---|---|
| Select Method | GET | Reading an existing order. |
| Request URL | https://api.webflow.com/v2/sites/YOUR_SITE_ID/orders/{{{order_id}}} | Replace YOUR_SITE_ID with the ID from Step 2. {{{order_id}}} is the variable from the previous chatbot step. |
| Select Auth Type | No Auth | The Bearer token goes in the Authorization header below. |
| Authorization | Bearer YOUR_API_TOKEN | Include the word 'Bearer' followed by a space, then your token. Webflow requires this prefix unlike Wix. |
| accept | application/json | Tells Webflow to return JSON. |
| Select Body Type | None | GET requests carry no body. |
| Choose Response Type | JSON | Webflow returns structured JSON. |
A successful Webflow order response looks like this:
{
"orderId": "6437e5c9fa5d3b7a7c1b0099",
"status": "unfulfilled",
"customerInfo": {
"fullName": "Priya Sharma",
"email": "priya@example.com"
},
"totals": {
"subtotal": { "unit": "INR", "value": "119900" },
"total": { "unit": "INR", "value": "129900" }
},
"purchasedItems": [
{
"productName": "Classic Cotton Kurta",
"variantName": "Blue / M",
"count": 2,
"variantPrice": { "unit": "INR", "value": "64950" }
}
],
"createdOn": "2026-06-20T10:30:00.000Z"
}Webflow stores all monetary values as strings in the smallest currency unit. Rs. 1,299.00 is returned as '129900'. In your WhatsApp reply, either display the raw number with a note, or use a maths step to divide by 100 before showing to the customer.
Map these response paths to variables in the External API Request step:
| Variable name | Response path | Example value | Note |
|---|---|---|---|
| order_id | orderId | 6437e5c9... | Long hex ID |
| order_status | status | unfulfilled | See status values below |
| customer_name | customerInfo.fullName | Priya Sharma | Full name in one field |
| order_total_raw | totals.total.value | 129900 | In paise: divide by 100 |
| item_name | purchasedItems[0].productName | Classic Cotton Kurta | |
| item_variant | purchasedItems[0].variantName | Blue / M | Colour/size if set |
| item_qty | purchasedItems[0].count | 2 |
Webflow order statuses: pending, unfulfilled, fulfilled, refunded, disputed. Map to plain-English labels in your reply.
If the customer messaged you first within the last 24 hours, your reply is a free service conversation. Respond within that window. If initiating a proactive update, use an approved Utility template at Rs. 0.115 per message.
1. Bot: "Please send your Webflow order ID.
You will find it in your order confirmation email."
2. Customer replies: 6437e5c9fa5d3b7a7c1b0099
3. Bot stores value as {{order_id}}
4. External API Request step fires:
GET https://api.webflow.com/v2/sites/6437e5c9fa5d3b7a7c1b0001/orders/6437e5c9fa5d3b7a7c1b0099
Authorization: Bearer YOUR_API_TOKEN
5. Response mapped:
order_status = "unfulfilled"
customer_name = "Priya Sharma"
order_total_raw = "129900" (Rs. 1,299.00 in paise)
item_name = "Classic Cotton Kurta"
item_qty = "2"
6. Bot replies:
"Hi Priya, here is your order update:
Status: Payment received, preparing for dispatch
Item: Classic Cotton Kurta x2
Total: Rs. 1,299.00
You will receive a shipping notification once
your order is dispatched."| Symptom | Likely cause | Fix |
|---|---|---|
| 401 Unauthorized | Missing 'Bearer' prefix or wrong token | Check the Authorization header reads exactly 'Bearer YOUR_TOKEN' with the word Bearer and a space. Webflow requires this prefix unlike Wix. |
| 403 Forbidden | Token lacks ecommerce:read scope | Delete the token, generate a new one in Site Settings, and enable ecommerce:read scope. |
| 404 Not Found | Wrong Site ID in URL or order does not exist | Confirm your Site ID by calling GET /v2/sites. Confirm the customer's order ID is the full hex string from their confirmation email. |
| Amount showing as 129900 | Webflow returns paise, not rupees | Divide totals.total.value by 100 before displaying. Rs. 1,299.00 = 129900 paise. |
| 'v1 endpoint no longer available' | Old v1 token or URL used | Regenerate your token in Site Settings (new v2 tokens), and use api.webflow.com/v2/... URLs. |
| Rate limit 429 | Exceeding 60 requests/minute per token | Add a delay or cache recent responses. For high-volume bots, implement exponential backoff on 429 responses. |
Shopify Admin API order lookup: X-Shopify-Access-Token, single-header auth.
Read guide →WooCommerce REST API v3: Basic Auth with Consumer Key and Secret.
Read guide →Wix eCommerce Orders API: two-header auth with API key and site ID.
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.