Sales
How to send Xendit and Midtrans payment links on WhatsApp and know when they are paid
In Indonesia and across Southeast Asia, a sale often closes in a WhatsApp chat. Here is how to answer "how do I pay?" with a Xendit or Midtrans link for the exact amount, let the customer pay with the methods you enabled, and have the conversation move on once the payment settles.
MonoChat Team Updated: 5 min read
On this page
To take a payment in a WhatsApp chat in Indonesia or Southeast Asia, send the customer a Xendit or Midtrans payment link for the exact amount, created from your own provider account, and let the provider tell your system when it is paid. The customer pays on the provider’s hosted page with the methods you enabled; the chat only carries the link. In MonoChat, a flow sends the link, keeps it for reminders and continues by itself when the payment settles.
When a Xendit or Midtrans link is the right choice
- You sell in Indonesia and want local methods. Customers expect the methods they use every day, and both providers are built for the Indonesian market. Midtrans in MonoChat charges in IDR only.
- You sell across Southeast Asia. Through MonoChat, Xendit takes IDR, USD, THB, VND, PHP and MYR, so one provider covers Indonesia, Thailand, Vietnam, the Philippines and Malaysia.
- The sale happens in the chat. Deposits for a booking, a custom order, a course seat, an invoice after a quote: anything where the price is agreed in conversation and a store checkout would be one step too many.
If you sell to customers outside the region, see our guide to PayPal payment links on WhatsApp; the overview of options is in WhatsApp payments in chat.
What the conversation looks like
Customer: Kak, I’ll take the 2 batik shirts, size L. How do I pay? Shop: Thank you! Total Rp 450.000 including shipping to Bandung. Pay here: (link). The link is for this order only. Shop (after payment): Payment received, thank you! Your order ships tomorrow with J&T; we’ll send the tracking number here.
Keep the link message short, give the total and what it includes, and say what happens after payment.
The WhatsApp rules to respect
- Inside the 24-hour customer service window you can send the link as a normal message. Since October 1, 2026 Meta charges these service messages after 1,000 free a month per business phone number.
- After the window closes, only an approved template can be sent. A reminder about one specific order is a utility template ($0.0250 per delivered message for Indonesian numbers); adding a discount makes it marketing ($0.0411), per our pricing guide based on Meta’s rate card of October 1, 2026.
- Never ask for card or account details in the chat. Payment happens on the provider’s page.
- Marketing messages need consent. Indonesia’s Personal Data Protection Law (UU PDP, Law 27/2022) and Meta’s own rules both expect the customer to have agreed.
How to set it up in MonoChat
MonoChat is an official Meta Business Partner. Midtrans arrived in MonoChat 3.8.36 and Xendit in 3.8.37 (October 2026), next to Stripe, PayPal and the other payment systems.
1. Add the provider. Go to Settings › Payment › Payment Systems, click Create and choose the provider.
- Midtrans: paste your Server Key. Turn on Sandbox mode to test with sandbox credentials first. You do not need to set a notification URL: MonoChat tells Midtrans where to send the result of each payment.
- Xendit: paste your secret API key and the callback verification token from the webhook settings of your Xendit dashboard. Point Xendit’s invoice callback to MonoChat’s Xendit webhook for this payment system; if you are unsure of the address, ask MonoChat support before you go live.
Use Set As Default if this provider should be used when a flow names none, and accept the currencies you charge in Currency Settings.
2. Send the link from a flow. Add a Send Payment Request node, choose the payment system, enter the amount (variables are allowed, so it can come from an order or an answer) and the currency. Write your own text with {{paymentLink}} where the link goes, or leave it empty for the default. If the amount is not a positive number or no payment system is set up, the node takes its failed output and nothing is sent. Midtrans amounts are rounded to whole rupiah.
3. Keep the link for reminders. Turn on Save Flow Variable with a name such as pay; the order ID and link are saved as flow.pay.paymentSystemOrderId and flow.pay.paymentLink.
4. Continue when it is paid. Start a flow with New Payment Received to thank the customer, tag them, assign the chat to the fulfilment team or call your own system with an HTTP Request node. Payment Amount and Payment Currency conditions separate a deposit from a full payment. A Midtrans payment counts only when its signature is valid and its status is settlement or capture; a Xendit payment only when the callback carries your token and the amount and currency match.
5. Remind once. Add a Wait node and a Customer Tag condition: if the customer has not paid, send one utility reminder template with the saved link.
Refunds are made in the provider’s dashboard: the payment systems added in MonoChat 3.8.36, Midtrans among them, do not support refunds from MonoChat yet. The same links work in Instagram, Messenger and web chat conversations. See payment integrations, or start for free at app.monochat.ai.
Before you go live
- Make a test payment in Midtrans Sandbox mode or Xendit test mode and check that the confirmation message arrives in the chat.
- Check that the methods you want (for example QRIS or bank transfer) are enabled with the provider.
- Make sure the currency is accepted: IDR only for Midtrans; IDR, USD, THB, VND, PHP or MYR for Xendit.
- Tell the customer what happens after payment and how long the link stays valid under your provider settings.
Sources
- Midtrans documentation: Snap integration guide (hosted Snap page,
redirect_url, payment methods set in Snap Preference; opened October 31, 2026) - Xendit documentation: Migrate from legacy Payment Links/Invoice to Payment Session (legacy payment link, previously called Invoice, moves from PENDING to PAID; opened October 31, 2026)
- Meta for Developers: Pricing on the WhatsApp Business Platform (opened October 31, 2026)
- MonoChat help center: Payment Systems and Flows, Send Payment Request
- MonoChat changelog 3.8.36 and 3.8.37
Put this into practice with MonoChat