WhatsApp API & Developers

WhatsApp Payments API: India, Brazil and Payment Links

Your customer has decided to buy. They are in the chat, they have the price, and now you send them to a checkout page that asks them to log in, retype their address and pick a payment method. Some of them never come back. Taking the payment inside WhatsApp sounds like the fix, and Meta does offer it, but not everywhere and not the way most people assume.

The WhatsApp Payments API is not one global wallet you switch on. It is a set of market-specific integrations built around a special order message, documented for India and Brazil, plus plain payment links everywhere else. This guide covers what Meta actually offers as of October 2026, what each option requires, and what is realistic for a small team.

What "payments on WhatsApp" means today

On the official platform, an in-chat payment starts with an order details message: an interactive message (or an order details template outside the 24-hour window) showing items, amounts and a pay button. The customer pays with a local method. You then send an order status message to update the order in the chat.

Which methods and partners work depends on the market:

MarketHow customers payYour partner
IndiaUPI apps, plus cards, NetBanking and wallets in some modesA payment gateway (several modes, below)
BrazilPix codes, payment links, boleto, one-click offsite card paymentYour payment service provider
EverywhereA link to your own checkout or gateway pageAny gateway

Everywhere else, "WhatsApp payments" means sending a payment link, which works on any number. Our guide to WhatsApp interactive messages covers the other message types around a sale.

India: three integration modes

India has the most developed option, built on UPI. Per Meta's India payments overview, there are three modes:

ModeHow it worksGatewaysPayment status from
UPI Intent and payment linksBring your own gateway; it generates a UPI intent or payment link that goes into the order details messageAny that supports dynamic VPA UPI intent or payment linksYour gateway's webhooks; you send order_status
Gateway deep integrationMeta connects to your gateway account; native UPI and other methods, refunds through WhatsApp APIsRazorpay, PayU, Billdesk, ZaakpayWhatsApp webhooks
Enhanced Payment LinksA gateway link in a template with one dynamic URL button, rendered as a native payment card with in-app checkoutRazorpay, PayU, CashfreeYour gateway's callbacks

A few details from Meta's pages that shape the choice:

  • Payment links are limited access. The payment-links variant inside order details is not publicly available yet; Meta asks businesses to contact its India payments support for access and to enable link domains.
  • Enhanced Payment Links have allowlists. PayU and Cashfree require allowlisting; Razorpay does not. Links must be direct production links, not wrapped in your own domain or redirected.
  • Check which UPI flow you build. Meta's UPI intent reference page warns that its integration there is not the recommended approach and points businesses to dynamic VPA instead.

What setup involves

For the UPI modes, you create a payment configuration in Meta Business Suite with your merchant VPA, merchant category code (MCC) and purpose code from your gateway. Every order details message names that configuration. Meta also expects a verified merchant, customer support details on your WhatsApp profile, and a messaging account mapped to a merchant-initiated messaging tier.

The order details message has strict field rules. Getting them right in code saves rejected sends:

import re, secrets

REF_OK = re.compile(r"^[A-Za-z0-9_.-]{1,35}$")

def make_reference_id(order_id: str) -> str:
    """Unique per message, max 35 chars, letters, digits, underscore, dash, dot."""
    ref = f"ord-{order_id}-{secrets.token_hex(3)}"
    if not REF_OK.match(ref):
        raise ValueError(f"invalid reference_id: {ref}")
    return ref

def inr(paise: int) -> dict:
    """Amounts use an offset of 100: Rs 12.34 is sent as 1234."""
    return {"value": paise, "offset": 100}

def check_total(subtotal: int, tax: int, shipping: int, discount: int, total: int) -> None:
    """Meta requires total = subtotal + tax + shipping - discount."""
    if total != subtotal + tax + shipping - discount:
        raise ValueError("order total does not add up")

Other limits from Meta's UPI payments reference: body text up to 1,024 characters, footer and item names up to 60, an order expiry of at least 300 seconds, and INR as the currency. After the gateway confirms payment, send order_status with a status of processing, partially_shipped, shipped, completed or canceled, so the order card in the chat stays current. Store the reference_id with the order; it is how you match gateway events to chat messages.

Per Meta's Brazil payments overview, businesses in Brazil can choose among dynamic Pix codes, payment links, boleto, one-click offsite card payment, order details templates and payment request call-to-action templates. The flow mirrors India: send an order_details message with a unique reference_id, then send order_status updates as the order moves.

One difference to plan for: Meta states that WhatsApp does not support payment reconciliation in Brazil. You reconcile with your payment service provider using the order's reference_id. In practice that means the same discipline as India's bring-your-own-gateway mode: your PSP's webhook is the source of truth for "paid", and the chat is just where the customer sees it.

What's realistic for a small team

Native in-chat payments are worth it when you sell at volume in India or Brazil and checkout drop-off is a measurable problem. For a small team the setup cost is real: Meta merchant onboarding, a gateway that supports the mode, and engineering to keep order messages, status updates and gateway webhooks in sync.

A simpler ladder:

  1. Send a payment link. Every gateway can create one. Paste it into the chat, or on Cloud API, put it in a template URL button with a dynamic suffix. Reconcile with the gateway webhook. This works in any country, on any number.
  2. Send a UPI QR or ID in India. Many small sellers share a UPI QR image or UPI ID in the chat. It is manual to reconcile, so match payments against the order in your books.
  3. Move to Enhanced Payment Links. If you already use Razorpay, PayU or Cashfree and run templates on Cloud API, EPL gives a native-looking payment card with relatively little extra build.
  4. Go deep only when volume justifies it. Deep integration with refunds through WhatsApp suits businesses with an engineering team and steady order volume.

Check Meta's pricing page for how order and payment messages are billed in your market. For reading the India rate card, see WhatsApp API pricing in India. For chasing unpaid invoices, see payment reminders by API, and for the shipping updates that follow a payment, see order notifications by API.

Where Tenashi fits

Tenashi does not process payments, send order details messages or connect to gateways for in-chat checkout. It runs on your existing WhatsApp number as a linked device, not Meta's official platform, so native WhatsApp payments are out of scope.

What it does well is the step most small teams actually use: the conversation where the sale happens. Your team answers questions in a shared inbox with DMs and groups, tracks the deal in the CRM, and sends the payment link or a UPI QR image from the number the customer already trusts. Your code can do the same with POST /api/v1/messages, including an image or PDF as media, and a webhook from your gateway can trigger the "payment received, thank you" message. The complete guide to the WhatsApp API covers when the official platform is worth the move.

See every feature · Read the API docs

FAQ

Is the WhatsApp Payments API available worldwide?

No. Meta documents in-chat payments for specific markets, mainly India through UPI and gateway integrations and Brazil through Pix, boleto, cards and payment links. Elsewhere there is no native in-chat payment, so businesses send a payment link from their gateway inside the chat instead.

What is a WhatsApp order details message?

An interactive message type that shows the customer an order summary, with items, amounts and a pay action, and starts the payment. Each one carries a unique reference id that you use to match payments. After payment, the business sends an order status message to update the order shown in the chat.

Which payment gateways work with WhatsApp payments in India?

Deep integration supports Razorpay, PayU, Billdesk and Zaakpay. Enhanced Payment Links support Razorpay, PayU and Cashfree, with allowlisting for PayU and Cashfree. The UPI intent and payment links mode works with any gateway that supports dynamic VPA UPI intent or payment links, though payment links are limited access.

Can a small business accept payments on WhatsApp without the API?

Yes, informally. Many small businesses send a gateway payment link, a UPI ID or a UPI QR image in the chat, then confirm receipt manually. It works on any number and costs nothing extra, but you reconcile payments yourself. Native in-chat checkout needs the official platform and merchant setup with Meta.

Does WhatsApp reconcile payments for me?

Not in every mode. In Brazil, Meta says WhatsApp does not support reconciliation, so you match payments with your provider by reference id. In India, deep integration reports payment status through WhatsApp webhooks, while the other modes rely on your gateway's webhooks. Treat your gateway as the source of truth.

Most sales on WhatsApp close in conversation, whatever the payment rail. Get started with Tenashi and run those conversations as a team.