WhatsApp API & Developers

WhatsApp Payment Reminder API: Invoices, Links, Cadence

Chasing payments is the least favourite job in any small business. Invoices go out by email, sit unopened, and someone ends up sending awkward personal WhatsApp messages from their own phone a month later. Clients do pay faster when the invoice and a pay button land where they already read messages, but only if the reminder feels like service, not pressure.

A WhatsApp payment reminder API automates that: your billing system sends the invoice, nudges before and after the due date, and stops the moment money arrives. This guide covers where Meta draws the line between utility and marketing for billing messages, a cadence that gets paid without souring the relationship, attaching PDF invoices, payment links that reconcile themselves, and what is specific to India and UPI.

Keep reminders utility, and keep them polite

On the official platform, a reminder sent outside a 24-hour customer service window must be an approved template. Billing reminders fit the utility category when they are about the customer's own account and contain no offer. Meta's categorization guidance lists "Reminder: Your monthly payment for {{service}} will be billed on {{date}}" as an account alert, which is utility.

The same page says account alerts should not upsell, include offers or "attempt to secure renewals". That rules out more than you might expect:

MessageLikely categoryWhy
Invoice INV-1042 for 18,500 is due on 10 NovemberUtilityAbout their account, no offer
Your subscription renews on 1 DecemberUtilityAccount alert
Pay today and get 5% offMarketingAn offer
Renew now to keep your current priceMarketingPushes a renewal
Your payment failed, update your card hereUtilityAbout their account

Tone matters as much as category. Threatening language gets reported, and reports hurt your number's quality rating. Name the invoice, the amount and the date, give a way to pay and a way to ask a question, and leave it there. If you are a lender or a collection agency, debt collection rules in your country apply on WhatsApp as they do on the phone; check them with counsel. For the wider category rules, see WhatsApp template categories.

A cadence that gets paid

Aim to get most invoices paid with one or two well-timed reminders, and hand the rest to a person. A sensible default:

WhenMessageAttachButton
Invoice issuedInvoice number, amount, due dateInvoice PDFPay now
3 days before dueFriendly heads-upNonePay now
Due dateDue todayNonePay now
3 days overdueOverdue notice, "reply if something's wrong"NonePay now
7 to 10 days overdueA personal message from the account ownerNoneNone

Every step needs stop rules, checked right before the send, not when the job was scheduled:

  • Paid. The gateway webhook marked the invoice paid. Stop.
  • Disputed. The client replied with a question or complaint. Stop automation and hand the chat to a person.
  • Promised. The client said "paying Friday". Pause until Friday.

The overdue step is where WhatsApp beats email. The client replies "the PO hasn't been approved yet" and you learn something your dunning emails never told you.

Attach the invoice PDF

On Cloud API, put the invoice in a template with a document header. You pass the file link and a filename at send time. Use the current Graph API version from Meta's changelog in place of v23.0.

curl https://graph.facebook.com/v23.0/PHONE_NUMBER_ID/messages \
  -H "Authorization: Bearer $WHATSAPP_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "messaging_product": "whatsapp",
    "to": "919811122233",
    "type": "template",
    "template": {
      "name": "invoice_issued",
      "language": { "code": "en" },
      "components": [
        { "type": "header", "parameters": [
          { "type": "document", "document": {
            "link": "https://billing.example.com/files/INV-1042.pdf?sig=SIGNED_TOKEN",
            "filename": "INV-1042.pdf" } }
        ] },
        { "type": "body", "parameters": [
          { "type": "text", "text": "Priya" },
          { "type": "text", "text": "INV-1042" },
          { "type": "text", "text": "Rs 18,500" },
          { "type": "text", "text": "10 November" }
        ] },
        { "type": "button", "sub_type": "url", "index": "0",
          "parameters": [ { "type": "text", "text": "inv_7Kq2Lm9" } ] }
      ]
    }
  }'

Invoices carry names, addresses and amounts, so serve the PDF from a signed, expiring URL rather than a guessable public path. File type and size limits for media are on Meta's docs; our guide to sending media with the WhatsApp API covers upload versus link.

The Pay now button is a URL button with a dynamic suffix. In the template, the URL ends in a variable, such as https://pay.example.com/i/{{1}}, and you pass an invoice token (like inv_7Kq2Lm9 above) at send time. Meta allows one variable at the end of the URL and up to two URL buttons per template.

The token should map to a hosted payment page or a payment link from your gateway. Then close the loop:

  1. Create the gateway payment link with your invoice id as its reference.
  2. Send the reminder with the link token in the button.
  3. When the gateway webhook reports the payment, mark the invoice paid and cancel any queued reminders.
  4. Send a short receipt or "thank you, received" message. That is utility too.
@app.post("/gateway-webhook")
def gateway_webhook():
    event = verify_gateway_signature(request)        # your gateway's check
    if event["type"] == "payment.succeeded":
        invoice = Invoice.by_reference(event["reference"])
        invoice.mark_paid(event["amount"])
        cancel_scheduled_reminders(invoice.id)       # stop rule, enforced here
        send_receipt(invoice)                        # utility template or in-window reply
    return "", 200

The classic complaint is a reminder that arrives after the client already paid, because it was queued before the payment and never cancelled. Check payment status in the worker right before each send, as well as cancelling jobs.

India: UPI and payments inside the chat

In India, Meta also offers Payments on WhatsApp, where the customer pays inside the chat with UPI apps, and depending on setup, cards, NetBanking and wallets. Per Meta's India payments overview, the business sends an order_details message, and there are three integration modes: UPI intent and payment links with your own gateway, deep integration with Razorpay, PayU, Billdesk or Zaakpay, and Enhanced Payment Links, which render a Razorpay, PayU or Cashfree link as a native payment card.

It needs merchant setup with Meta and your gateway, so it suits businesses collecting at volume. For most small businesses, a UPI or gateway payment link in the reminder is the practical first step. Our guide to the WhatsApp Payments API covers the native options and Brazil's.

What payment reminders cost

On the official platform, each delivered utility template is billed at your client's market rate, with utility volume tiers lowering the rate as monthly volume grows. From October 1, 2026, utility templates sent inside an open customer service window are billed too, and service replies are free only for the first 1,000 per number per month. A five-step cadence for 2,000 invoices a month is 10,000 messages before anyone replies, so model it before committing. The WhatsApp API cost estimate walkthrough has a spreadsheet method.

Where Tenashi fits

Agencies, consultants, coaching businesses and distributors usually chase payments from one WhatsApp number their clients already know, often in client groups as well as DMs. Tenashi links that number to a shared inbox, and its API lets your billing system send the invoice and reminder from it. Media can be a PDF up to 25 MB with a filename, and the request carries a link in the text:

curl https://usetenashi.com/api/v1/messages \
  -H "Authorization: Bearer $TENASHI_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: inv-1042-due-reminder" \
  -d '{"to": "+919811122233", "text": "Hi Priya, invoice INV-1042 for Rs 18,500 is due on 10 November. Pay here: https://pay.example.com/i/inv_7Kq2Lm9", "media": {"url": "https://billing.example.com/files/INV-1042.pdf?sig=SIGNED_TOKEN", "filename": "INV-1042.pdf"}}'

When the client replies "PO pending", the message lands in the inbox next to the deal in the CRM, and a teammate sets a follow-up. The honest limits: no templates or buttons, sends are paced at one every 4 to 12 seconds per number, and 50 new chats per number per day through the API. Fine for B2B clients you already talk to; wrong for thousands of consumer billing reminders a day, which belong on Cloud API utility templates. The complete guide to the WhatsApp API compares both routes.

Read the API docs · Get started

FAQ

Is a payment reminder a utility or marketing WhatsApp template?

Utility, when it is about the customer's own invoice or account and contains no offer. "Invoice due on 10 November" is utility. "Pay today for 5% off" or "renew now to keep your price" is marketing, because Meta's rules exclude offers and renewal pushes from account alerts. Meta can recategorize after approval.

Can I send a PDF invoice through the WhatsApp API?

Yes. On Cloud API, use a template with a document header and pass the file link and filename when you send. Inside an open customer service window you can also send a document message directly. Serve invoices from signed, expiring URLs, since they contain personal and financial details.

How often should I send WhatsApp payment reminders?

Send the invoice, a heads-up a few days before the due date, a note on the due date and one overdue notice. After that, hand over to a person. Check payment status right before every send, and stop automation as soon as the client pays, disputes or promises a date.

Can customers pay inside WhatsApp?

In some markets. Meta documents in-chat payments for India, using UPI and gateway integrations, and for Brazil, including Pix and payment links. Elsewhere, and for most small businesses, the practical approach is a payment link from your gateway in a URL button or message, reconciled by the gateway's webhook.

Yes, even for money they owe you. The reminder is business-initiated, so get WhatsApp consent in the contract, onboarding form or quote acceptance, and keep a record of it. For existing clients who already chat with your number, a quick message asking whether invoices on WhatsApp suit them works well.

Getting paid is a conversation as much as a reminder. If your clients already message one WhatsApp number, read the Tenashi API docs and send invoices from it.