WhatsApp Native Payments with UPI is the fastest checkout flow Indian D2C brands can ship in 2026. The user discovers a product inside a chat, taps the catalog, picks variants, opens cart, taps Pay, completes UPI authentication in their default UPI app, and lands back inside WhatsApp with order confirmation — without ever leaving the chat thread. Conversion rates lift 25–40% versus external payment gateway redirects. This guide is the 2026 India builder playbook: catalog upload, cart flow, UPI handoff via Razorpay or BillDesk, order webhook from Meta, refund handling, and the production gotchas that crash early launches.
What WhatsApp Native Payments Actually Is
Meta's Native Payments lets Indian businesses with a verified WhatsApp Business Account accept payments directly inside WhatsApp via UPI (initial launch) and credit/debit cards (rolling out through 2026). The user sees a Pay button on cart, taps it, gets handed off to their default UPI app for authentication, and returns to the WhatsApp chat with payment confirmation. Meta does not handle the money flow — a Payments Service Provider (PSP) like Razorpay, BillDesk, PayU, or Cashfree settles the transaction and reports back to Meta and the merchant.
The Five Ingredients for a WhatsApp Native Checkout
- Verified WABA with a WhatsApp Business Account in good standing. Brand-new numbers usually need 60+ days operational history before Meta enables Payments.
- Approved Commerce Catalog on Facebook Business Manager. Each SKU has product ID, name, price, currency, image, description, retailer ID.
- PSP integration (Razorpay is the most-deployed Indian path). PSP exposes onboarding API, payment intent creation, settlement webhook.
- Payment Configuration registered with Meta linking the WABA to the PSP merchant account.
- Cart message + Order webhook handlers in your backend.
Catalog Upload
Product catalog can be uploaded three ways: manual entry in Facebook Commerce Manager, CSV import, or Catalog API. For Indian D2C with 50+ SKUs, the Catalog API is the only sane path because manual upload breaks at scale and CSV imports lose category mappings.
POST https://graph.facebook.com/v24.0/{CATALOG_ID}/products
{
"retailer_id": "SKU-2026-APP-001",
"name": "Crewneck Sweatshirt - Indigo",
"price": "129900", // in paise = ₹1,299
"currency": "INR",
"description": "Heavyweight 380 GSM cotton...",
"image_url": "https://yourdomain.com/images/sku001.jpg",
"category": "FASHION_AND_APPAREL",
"availability": "in stock",
"condition": "new",
"url": "https://yourdomain.com/products/crewneck-indigo"
}
Authorization: Bearer {SYSTEM_USER_TOKEN}
Sync your catalog daily. Inventory mismatches cause "out of stock" errors at checkout — the second-most-common reason for WhatsApp Native Payments cart abandonment.
Cart Message Structure
Once a user picks variants and clicks Add to Cart in your chatbot, you send an interactive cart message back to them. Meta renders it natively with line items and a Pay button.
POST https://graph.facebook.com/v24.0/{PHONE_NUMBER_ID}/messages
{
"messaging_product": "whatsapp",
"to": "919876543210",
"type": "interactive",
"interactive": {
"type": "order_details",
"header": { "type": "text", "text": "Your Cart" },
"body": { "text": "Confirm your order to proceed to payment." },
"action": {
"name": "review_and_pay",
"parameters": {
"reference_id": "order_2026_001847",
"type": "digital-goods",
"currency": "INR",
"total_amount": { "value": 259800, "offset": 100 },
"order": {
"items": [
{
"retailer_id": "SKU-2026-APP-001",
"name": "Crewneck Sweatshirt - Indigo",
"amount": { "value": 129900, "offset": 100 },
"quantity": 2,
"country_of_origin": "IN"
}
],
"subtotal": { "value": 259800, "offset": 100 },
"tax": { "value": 0, "offset": 100, "description": "GST included" },
"shipping": { "value": 0, "offset": 100, "description": "Free shipping" },
"discount": { "value": 0, "offset": 100, "description": "" }
},
"payment_settings": [
{
"type": "payment_gateway",
"payment_gateway": {
"type": "razorpay",
"configuration_name": "your_razorpay_config_name",
"razorpay": {
"receipt": "order_2026_001847",
"notes": { "customer_phone": "919876543210" }
}
}
}
]
}
}
}
}
The User-Side Flow
- User receives cart message, taps "Review and Pay".
- Meta renders cart UI in a sheet inside WhatsApp; user verifies items.
- User taps "Pay" → Meta hands off to selected UPI app (Google Pay, PhonePe, Paytm, Amazon Pay).
- UPI app authenticates payment via UPI PIN.
- Payment success → user returns to WhatsApp with order confirmation visual.
- Razorpay (or your PSP) settles to Meta, Meta acknowledges to your backend via webhook.
Total flow time on a stable network: 30–60 seconds. Compare to website checkout: 90–180 seconds. The shorter flow is why Native Payments converts measurably better.
Order Webhook Handler
Meta posts an order webhook to your registered endpoint when payment status changes. The body looks like this:
{
"object": "whatsapp_business_account",
"entry": [{
"changes": [{
"field": "messages",
"value": {
"messaging_product": "whatsapp",
"metadata": { "phone_number_id": "987467787785803" },
"messages": [{
"from": "919876543210",
"id": "wamid.HBgM...",
"timestamp": "1714567890",
"type": "order",
"order": {
"catalog_id": "CATALOG_ID",
"product_items": [
{ "product_retailer_id": "SKU-2026-APP-001", "quantity": 2, "item_price": 1299, "currency": "INR" }
]
}
}]
}
}]
}]
}
Plus a separate payment_status webhook event with values: pending, captured, failed, refunded. Persist both, reconcile against your internal order state, and update inventory on captured.
Razorpay Configuration in Meta Business Manager
- Razorpay Dashboard → Settings → WhatsApp Pay → Generate WhatsApp configuration.
- Copy the configuration JSON.
- Meta Business Manager → WhatsApp Manager → Payments → Add Configuration → paste Razorpay config.
- Wait for Meta verification (typically 24–48 hours).
- Reference the configuration_name in your cart messages.
Production Gotchas
- Currency offset error. Meta expects amounts in smallest currency unit (paise for INR) with offset:100. Mistakes here are silent — Meta accepts 1299 thinking it's ₹12.99 instead of ₹12.99-but-meant-₹1,299. Audit every send.
- Catalog out of sync. If your inventory shows in stock but Razorpay rejects, users see a generic "Cannot complete payment" with no recovery path. Sync your catalog every 5 minutes during high-traffic windows.
- Webhook delivery race. Order webhook and payment_status webhook can arrive in either order. Build idempotency on both — deduplicate by reference_id and reconcile on either trigger.
- Refund flow. Refunds initiated through Razorpay propagate to WhatsApp via payment_status: refunded. Trigger this through Razorpay API, not directly to Meta.
- Mobile-only. WhatsApp Native Payments works on mobile WhatsApp clients only. Desktop users see a fallback "Open WhatsApp on your phone" message. Plan your customer journey accordingly.
- Tier limits. Brand-new WABAs face per-day transaction caps from Meta during initial volume buildup. Plan for ramp-up over 7–14 days.
- Tax handling. Indian GST inclusion in display total is the merchant's responsibility. The tax field in cart message is informational only — your invoicing and GST reporting still happens through your accounting system.
Conversion Lift Benchmarks
| Checkout method | Avg conversion rate | Avg time-to-pay |
|---|---|---|
| Website + UPI checkout | 2.5–4% | 90–180s |
| WhatsApp redirect to website checkout | 3–5% | 60–120s |
| WhatsApp Native Payments + UPI | 5–8% | 30–60s |
The 25–40% conversion lift over redirect-style flows is the entire reason to ship Native Payments. The lift is highest for impulse purchases (apparel, food, beauty under ₹2,000) and smallest for considered purchases (electronics, jewellery above ₹10,000).
What WhatsApp Native Payments Cannot Do (Yet)
- EMI options. WhatsApp UPI flow does not support EMI splits. Direct users to website for EMI checkout.
- Subscriptions. Recurring billing must happen via Razorpay subscription API, not Meta Native Payments.
- International cards. India 2026 launch is UPI-first; international card support is rolling out gradually.
- Wallet payments. Paytm wallet, Mobikwik, etc., not yet native — UPI from those apps works.
- Gift card / store credit. Apply via your backend before generating the cart total.
Build a WhatsApp checkout on RichAutomate.
Pre-wired Razorpay integration, catalog sync helpers, idempotent webhook handlers, refund pipeline, and the inventory cache layer that prevents catalog drift.