Skip to main content

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
  1. When a Xendit or Midtrans link is the right choice
  2. What the conversation looks like
  3. The WhatsApp rules to respect
  4. How to set it up in MonoChat
  5. Before you go live
  6. Sources

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.

  • 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

FAQ

Frequently asked questions

Can I send a Xendit or Midtrans payment link on WhatsApp?

Yes. Both create a hosted payment page, and its link can be sent in any WhatsApp chat. With MonoChat, a flow creates the link for the exact amount from your own Xendit or Midtrans account, sends it in the conversation and learns when it is paid.

Which currencies are supported?

Through MonoChat, Xendit accepts IDR, USD, THB, VND, PHP and MYR, and Midtrans accepts IDR only. A payment request in another currency is refused.

Which payment methods will my customer see?

The ones you enabled with the provider. Midtrans shows the methods you activated in Snap Preference in its dashboard; Xendit shows the channels enabled on your Xendit account. MonoChat does not choose them.

How does MonoChat know the customer paid?

The provider notifies MonoChat. A Midtrans payment counts as paid when its notification has a valid signature made with your Server Key and the status is settlement or capture. A Xendit payment counts as paid when the callback carries your verification token and its amount and currency match the order. The New Payment Received event then starts your next flow.

Does sending a payment link on WhatsApp cost anything?

MonoChat adds no markup on Meta's fees. Meta charges per delivered message: inside the 24-hour customer service window the link is a service message, free for the first 1,000 a month per number; outside it you need a template, for Indonesia $0.0250 for utility and $0.0411 for marketing. The provider's own transaction fees apply separately.

First month of Growth on us

Run WhatsApp, Instagram and Messenger from one inbox

Start free with MonoChat: shared team inbox, AI assistants, templates and campaigns on official Meta APIs.

One code per business • 30 days to redeem • No card needed

$150 to get started.

Claim