Journal  /  Ecommerce & Revenue
Ecommerce & Revenue

How to Create and Send Invoices Through WhatsApp

DT
DMly Team
Aug 30, 2026 · 31 min read
How to Create and Send Invoices Through WhatsApp

Here is the biography of a typical invoice. Created on a Friday afternoon in a spreadsheet, exported to PDF, attached to an email titled “Invoice attached”, and delivered into an inbox where it settles quietly among forty other unread things.

Day nine: opened, skimmed, mentally filed under “this week”. Day fourteen: the due date passes, and nothing happens, because nothing was ever going to happen on its own. Day twenty: you draft the follow-up, soften it twice, delete it. Day thirty-four: the awkward phone call. Day forty-one: paid, with an apology, by a customer who never minded paying and simply never saw the thing.

Multiply that biography by every invoice you send and you get the numbers researchers keep finding. In Intuit QuickBooks’ 2026 late payments research, 59% of US small businesses had invoices overdue by more than 30 days, up from 47% a year earlier, and the businesses still waiting were owed $17,700 on average. The UK government puts the cost of late payment at £11 billion a year and 38 business closures a day. Very little of this is refusal. Most of it is an unread email, which is exactly the problem a WhatsApp invoice solves first.

This guide is about giving the invoice a different biography: created where your customer already messages you, delivered in the chat they actually read, paid from a link inside it, recorded without you copying anything anywhere. In this guide, we’ll look at what a WhatsApp invoice really consists of, then build it in three parts with a platform like DMly: the document, the money and the record. Deposits, cash payments, Meta’s messaging rules, statuses, statements and automatic reminders all get their turn.

A WhatsApp Invoice Is Three Things

“Send the invoice on WhatsApp” sounds like one action, and that framing is why most attempts disappoint. Attaching a PDF in a chat replaces the envelope, nothing else. You still chase by hand, you still reconcile by hand, and the customer still has to leave the chat to pay.

Done properly, a WhatsApp invoice is three connected things:

  • A document: line items, tax, a due date and your branding, on a page the customer can open and download without logging into anything.
  • A payment: a link in the same message that opens a hosted checkout, always asking for exactly what’s still owed.
  • A record: a status, a ledger entry and a running client statement that update themselves when money moves.
Six-step loop showing an invoice created in DMly, sent on WhatsApp with a PDF link and pay link, paid at a hosted checkout, confirmed by the gateway webhook, recorded on the client statement, then reconciled with reminders for anything unpaid
Figure 1. The document, the payment link and the record are one object in DMly. The gateway does the card processing; its webhook tells DMly the money arrived.

Why put all three in WhatsApp rather than email? Because that’s where the reading happens. Meta said in June 2026 that people now open more than a billion conversation threads with businesses every day across its messaging apps, and in a Meta-commissioned Kantar study, 73.3% of people surveyed said they prefer messaging a business over email or a call. Your customer already messaged you this week, to book, to move a slot, to ask whether the treatment includes a wash. The conversation is open. The invoice just isn’t in it.

And a bill that sits in a conversation gets its questions answered in the conversation. HubSpot’s research found 90% of customers rate an immediate response as important when they have a service question, and “what’s this line for?” is exactly the kind of question that stalls a payment when it has to travel by email.

The whole loop in one line: Job done → invoice created → WhatsApp message with the PDF page and pay link → customer pays at a hosted checkout → webhook marks it Paid → the statement updates itself and your receipt flow fires → anything unpaid gets reminded automatically

Everything in that loop rests on plumbing you connect once. Here’s the full list, so nothing later surprises you; the parts below cover each piece where it belongs.

  • WhatsApp connected through the official API via the DMly WhatsApp channel, with the managed invoice template approved (part one).
  • Finance defaults and a catalogue: currency, due days, notes, tax rates, and your services and products priced once (part one).
  • A payment gateway with its webhook registered, the step almost everyone skips (part two).
  • Contacts with a WhatsApp number: anyone who has messaged you already qualifies; add the number first for anyone new.
  • Team permissions: invoicing follows roles, and recording a refund needs the Issue refunds permission, admin-only by default (part three).

The takeaway: aim for the whole loop, not the attachment. The rest of this guide builds your WhatsApp invoice one part at a time.

Part One: The Document. Create an Invoice Worth Opening

The document is where your invoicing time actually goes, unless you front-load it. DMly’s design is that everything slow happens once, in settings and the catalogue, so the invoice itself takes about a minute.

Set the Finance defaults before the first invoice

Open Finance → Settings and make four decisions:

  • Default currency. Every line on one invoice must be in the same currency; DMly rejects a mix rather than converting it. If you leave the default empty, DMly works the currency out from the invoice lines, then your workspace business currency, then USD.
  • Default due days. This ships as 0, which means new invoices get no due date, and an invoice with no due date can never turn Overdue, which quietly disables the reminder machinery in part three. Set a real number, and keep it short. QuickBooks’ 2026 data makes the case: 55% of businesses on net-30 terms had overdue invoices against 26% of those asking for immediate payment. The wait is structural; the clock starts when you set the terms.
  • Invoice notes. Copied onto each new invoice. This is the home for bank details, “please quote the invoice number”, and your deposit policy, so nobody has to ask.
  • Numbering and tax. Invoices run INV-0001, INV-0002, zero-padded and unique in your workspace; the prefix is editable. Set your workspace tax rate, remembering a service’s own rate overrides it, and note that shipping is untaxed unless you switch on Apply tax to shipping.

Currency, once, properly: The expensive mistake isn’t a rejected invoice, it’s a quiet one: services priced in one currency while your Finance default says another produces numbers that look right and aren’t. Price the catalogue and the default in the same currency, and if you genuinely sell in two, keep separate services for each.

Build the catalogue once

Invoice lines come from Offerings → Services (what you do: a bridal trial, a 60-minute lesson, a check-up) and Offerings → Products (what you sell: a serum, a meal-prep pack), each with a price and, where relevant, its own tax rate. When you add a line, the name and price are copied onto the invoice as a snapshot, so repricing the catalogue next month never rewrites an invoice you already sent.

Name items the way customers talk. “Bridal hair trial (90 min)” reads like the thing they bought; “Service A” reads like a bill to question. You fix the names once and every future invoice inherits them.

Raise the invoice in about a minute

The DMly new invoice screen with a client selected, a due date, two line items pulled from Offerings, a subtotal of 220 dollars, 7.5 per cent tax, a 40 dollar deposit already deducted and a balance due of 196 dollars 50, beside a switch for attaching a pay link and a preview of the WhatsApp message.
Figure 2. Line items come from Offerings, the deposit is already deducted, and the pay link rides along with the message.
  1. Start from wherever you already are. Finance → Invoices for a fresh one, or New invoice on the client’s profile, which opens Finance with them pre-selected. Mid-conversation, open the contact from the inbox side panel and start there. Raising an invoice converts a lead to a client automatically, so don’t hunt for a convert button first.
  2. Add lines and quantities. Pick from the catalogue, set quantities (ten lessons is one line with quantity ten), and check the totals as they build.
  3. Apply a coupon if there is one. Percentage coupons discount the total including tax, and a discount can never take an invoice below zero.
  4. Due date and notes. Leave them blank to inherit your defaults, or override for this invoice: a wedding balance might get “due 14 days before the date” terms that your walk-in work never needs.
  5. Read the numbers once, properly. Prices lock when the invoice is created, and once it’s sent you can’t edit or delete it, only void it. Draft is the one status where changing your mind is free.

Send your WhatsApp invoice inside Meta’s rules

Here is where a WhatsApp invoice differs from an emailed one, and where a platform earns its keep. The WhatsApp Business Platform has two delivery modes, and Meta decides which applies, not you. As of August 2026:

  • Inside the 24-hour customer service window (your customer messaged you in the last 24 hours), you can send free-form messages. Meta does not charge for those until 1 October 2026, and from that date it charges for them at your market’s utility rate. Every message the customer sends re-opens the window.
  • Outside the window, Meta delivers approved templates only, nothing else. Templates are categorised Marketing, Utility or Authentication, and since 1 July 2025 Meta bills per delivered template message. Utility templates delivered inside an open window are free until 1 October 2026, and billable from that date, which our guide to the October WhatsApp pricing change explains.
  • Invoices are Utility, as long as they stay boring. Meta’s own examples of Utility include payment reminders. Add a promotional line (“20% off your next visit!”) and Meta recategorises the template as Marketing and bills it accordingly. Keep the invoice message to the name, the number, the amount and the link.

DMly ships with a set of managed templates, marked Managed by DMly, that it creates and submits to Meta automatically when you connect a live number. The one doing the work here is dmly_invoice_sent, which delivers the customer’s name, the invoice number, the amount and the link. Sending an invoice moves it from Draft to Sent and publishes its own public PDF page, no login needed, where the customer can view or download the document. If you haven’t connected a payment gateway yet, DMly fills the link slot with the PDF page instead, so the message never goes out with a blank link; they just can’t pay by card from it yet.

Two-column diagram comparing an open WhatsApp customer service window, where free-form invoice messages and the PDF can be sent, with a closed window, where only the approved dmly_invoice_sent utility template gets through
Figure 3. Same invoice, two delivery paths. DMly picks the right one; your job is to make sure the template is approved before you need it.

The rule that trips people up: if the template is still pending and the customer’s window is closed, DMly sends nothing at all rather than a message that quietly fails. That’s the correct behaviour, and it means “check the template” belongs on your setup list, not your troubleshooting list. Templates live on the WhatsApp channel’s Templates page (the System tab holds the managed ones), move from Draft to Pending to Approved or Rejected, and DMly re-checks their status with Meta about every ten minutes, with a Refresh templates button when you’d rather not wait.

The takeaway: treat the approved template like a licence and the open window like a discount, and note that the discount has an end date. Until 1 October 2026 an invoice sent while the conversation is warm travels at no Meta charge, with the document one tap away; after that date it costs your market’s utility rate, which is still the cheapest way to get paid.

Part Two: The Money. Give Every Invoice a Way to Be Paid

The document asks; this part collects, and a WhatsApp invoice without a working pay link is just a nicer-looking chase. It’s also where the one genuinely technical step of the whole system lives, so we’ll do it first and get it over with.

Connect a gateway, and register its webhook yourself

DMly connects to six payment providers as of August 2026. The money always settles in your own account with the provider; DMly holds no funds and adds no fee on top of the provider’s processing fee.

GatewayWhat you paste into DMlySaved-card auto-charge for subscriptions?
StripeSecret key, webhook secretYes, card saved without a charge
PayPalClient ID, client secret, environment (sandbox or live), webhook IDYes, card saved without a charge
PaystackSecret keyYes, via a small real charge on the hosted page
RazorpayKey ID, key secret, webhook secretYes, card saved without a charge
MyFatoorahAPI token, base URL, webhook secretYes, via a small real charge on the hosted page
Mercado PagoAccess token, webhook secretNo: pay links only, collected each cycle
  1. Get your keys from the provider’s dashboard. Live credentials for real money, sandbox while practising. Don’t mix them; a test key with a live webhook secret is the classic cause of rejected webhooks.
  2. Paste them into the gateway tile and save. DMly validates on save, so a typo surfaces now rather than at a customer’s checkout.
  3. Add the webhook endpoint at the provider. The tile shows the URL; you copy it into Stripe, Paystack or PayPal’s webhook settings yourself. DMly cannot do this step for you.
  4. Pay yourself once. Raise a small invoice to your own number, pay it, and watch it flip to Paid. If it doesn’t, it’s the webhook, nearly every time.

The step everyone skips: Skip the webhook and a customer can pay successfully at the provider while the invoice in DMly still says unpaid, which is worse than no online payment at all, because now the reminder flow will chase someone who has already paid.

The DMly Stripe integration screen showing a connected live account with a publishable key and a hidden secret key, an amber panel with the webhook URL to paste into Stripe and the three events it listens for, a warning that without it the payment succeeds while the invoice still says unpaid, and Paystack, PayPal and manual cash options beside it.
Figure 4. The webhook is the step people skip, and it is the reason paid invoices sometimes still read unpaid.

Two quiet behaviours worth knowing. With more than one gateway connected, pay links follow the Default payment gateway card at Finance, then Settings, then Gateways, which ships on First connected gateway, and disconnecting whichever one is minting means the next-earliest takes over silently, so set it deliberately. And if a provider rotates or expires your keys, the tile flips to Error and workspace admins get one email, subject “Action needed: your Stripe integration was disconnected” (or the relevant gateway); fresh keys and a small test payment fix it.

If your provider isn’t on the list (Flutterwave, say), you can still get paid: create the link in the provider’s own dashboard, paste it into the chat, and record the payment against the invoice by hand when it lands. You lose automatic reconciliation, not the ability to collect. For the wider payments picture, including what WhatsApp’s own in-chat payments do and don’t cover, see our guide to setting up WhatsApp payments.

The pay link, the QR code and the quick request

Every DMly pay link opens the provider’s hosted checkout, and it always asks for the invoice’s current Balance due, not the original total. That one property carries a surprising share of the system: it’s what makes deposits, part payments and re-shares safe.

From an invoice’s Payment link & QR view you can copy the link, open the checkout yourself, or generate a QR code for the counter, and send it by SMS or email on the days WhatsApp isn’t the right channel. For a quick “that’ll be $20 for the extra treatment” that doesn’t deserve a document at all, use Request a payment from the inbox reply box: it mints a pay link for any amount and records the payment when it arrives, no invoice involved. In automations, the Send Payment Link step does the same job.

A DMly invoice payment link screen showing the short pay link, a QR code, share buttons for WhatsApp, SMS and email, a paid in full status with the card payment date, and a preview of the hosted checkout page the customer opens with card, Apple Pay and Google Pay options.
Figure 5. No app, no account, no login. That is most of why a link gets paid faster than a PDF.

Deposits and part payments

Two different things get called a deposit, and they live in two different places.

Booking deposits belong on the service, not the invoice. In Offerings → Services each service has a payment mode: No payment required, Pay after the appointment (the booking confirms and DMly sends the pay link), or Pay before booking, which holds the slot for 15 minutes while the customer pays and frees it if they don’t. That’s the tool for “secure your bridal slot”, and the appointment booking guide covers it properly.

Invoice deposits are for the bigger job paid in stages: the wedding package, the ten-lesson block, the catering order, the treatment plan. No special feature needed, because of the balance-due link:

  1. Raise one invoice for the whole job, so the customer sees the total and your records show what’s owed.
  2. Ask for the deposit as a part payment. Name the amount in the message (“a $100 deposit secures the date; the rest is due on the day”). When it arrives, online or recorded by hand, the invoice shows Partially paid.
  3. Share the same link again for the balance. It re-mints for what’s still owed, and the invoice turns Paid when the balance lands.
Four-step timeline of a $300 invoice: sent, a $100 deposit paid through the pay link making it Partially paid, the link re-minted for the $200 balance, and the balance settled by card or recorded cash
Figure 6. One invoice, several payments. Each payment, online or recorded by hand, updates the balance, and the pay link re-mints for what’s left.

When the final total isn’t settled yet (a quote that might still change), take the deposit through Request a payment first, then raise the invoice once the scope is fixed and record the deposit against it.

Cash, transfers and the rest of the till

Plenty of customers will keep handing you cash or sending transfers, and the goal was never to stop them. The goal is one ledger whichever way money arrives.

Record payment, on the invoice or the client profile, logs a manual payment with a method of Cash, Bank transfer, Credit / debit card, Cheque, EFTPOS or Other, plus a date. Manual payments are marked Succeeded immediately, land in the same Payments ledger as gateway payments, and move the invoice to Partially paid or Paid exactly as a card payment would.

The flow: Customer: “Sent by transfer just now” → you check the bank app → Record payment (Bank transfer, today, reference in the note) → invoice Paid → statement shows the credit → your receipt automation (part three) sends the thank-you

Three habits keep this painless: bank details live in the invoice notes so nobody asks; transfer-payers quote the invoice number, because “INV-0042” in a bank feed beats “from Amaka”; and you record the payment the moment you see it, so tomorrow’s reminder doesn’t chase someone who paid today.

Refunds go backwards, carefully

The Refund action in DMly is bookkeeping. It marks the payment refunded and reverses it on the client’s statement, and it never contacts the gateway, so no money moves and no card is touched. You issue the actual refund in the provider’s dashboard, or hand back the cash, and keep the DMly record so the statement stays true. Recording one needs the Issue refunds permission, admin-only by default, which is exactly the kind of thing you want permission-gated in a busy shop.

The takeaway: the gateway plus its webhook turns invoices into payments; the balance-due link turns deposits into a non-event; Record payment keeps the offline world in the same book as the online one.

Part Three: The Record. Let the Paper Trail Keep Itself

Everything so far produced entries, and this part is about never having to copy them anywhere: what the statuses mean, where the money views live, and the automations that do the chasing.

Seven statuses, and what each one asks of you

Invoice statusWhat it meansWhat to do
DraftCreated, not sent. Still editable, and the only status you can delete.Check the numbers, then send.
SentIssued to the client and posted to their statement.Nothing; the reminder flow is watching the due date.
Partially paidSome money in, balance outstanding.Share the re-minted link when the balance is due.
PaidSettled in full.Receipt, thank you, maybe a review request.
OverduePast its due date with money owed, applied by a nightly job.Let the escalation flow nudge once, then a human.
VoidCancelled but kept on record; outranks every other status.Issue a corrected invoice if one is needed.
Refunded / Partially refundedA payment was reversed after settling.Confirm the money actually went back at the provider.
Status flow of a DMly invoice from Draft to Sent, then Partially paid or Paid, Overdue when past due and unpaid, Void when cancelled, and Refunded after a payment is reversed
Figure 7. The status tells you what to do next. Overdue is applied overnight, and only to invoices that have a due date, which is why Default due days can’t stay at zero.

The nightly job does three things while you sleep: marks past-due invoices Overdue, reminds clients about subscription renewals coming in three days, and rolls subscriptions that are due. Voiding deserves one more sentence, because it’s the answer to “I sent it with the wrong price”: void credits the client’s statement for the unpaid portion only, keeps what was actually paid on record, and claws back loyalty points earned on the sale.

Three views that replace the spreadsheet

  • Payments (Finance → Payments) is the single ledger: online, manual and refunded, with statuses Pending, Succeeded, Failed and Refunded that only move forward, so a late or out-of-order message from a provider can never drag a paid invoice back to unpaid. Invoice totals count only Succeeded payments. If you take tips, the Amount column shows the full charge and a separate Tip column shows the gratuity, and a tip never marks more of an invoice settled than was actually billed.
  • Statements (Finance → Statements, or the Statements tab on a client) is the running account per contact: Date, Client, Description, Debit, Credit, Balance. Invoices post debits, payments post credits, refunds reverse, voids credit back the unpaid part. Nothing on a statement is written by hand; there’s no add, no edit, no import. Bill someone in two currencies and the Balance column runs a separate chain per currency rather than inventing a meaningless total.
  • The client profile answers “what does Amaka owe?” one click from her conversation: money tiles for Available credits, Amount due (red when there is one), Loyalty points, Lifetime value and, once it’s non-zero, Tips collected, above a Finance tab listing her invoices, orders, payments, statements, subscriptions, credits, loyalty, appointments and classes, the most recent 50 of each.

One nuance for loyalty-running businesses: points are awarded when a paid invoice settles, except invoices attached to appointments, which award their points when the appointment is marked completed. And for month-end, DMly’s invoices page says you can export invoices and payments for your accountant, while the Expenses tab records money going out, never billable to a client, so both directions live in one place.

Reminders, receipts and escalations that send themselves

This is the part that buys your evenings back, and it runs on three ingredients in the flow builder. The finance triggers: Invoice created, Invoice sent, Invoice paid, Invoice overdue (which fires once per invoice; an invoice can’t go overdue twice), Invoice voided, plus Payment succeeded, Payment failed, Payment refunded and the subscription family. The finance steps: Create Invoice, Send Payment Link, Record Payment, Create Subscription, Apply Coupon, Issue Credits and Deduct Credits, most with a FAILED output for when the thing they were told to act on is gone. And the glue: Smart Delay, whose Until event mode can wait until before, on or after the invoice’s due date, always the invoice the flow is about, with a SKIPPED output for when waiting has become pointless because the invoice was settled.

Timeline of automatic invoice reminders: invoice sent on day 0, a reminder with the pay link the day before the due date, the nightly job marking it Overdue on day 7, an overdue escalation that waits three days, and a human follow-up on day 10
Figure 8. The reminder is polite and early; the escalation is short and factual; a person only gets involved on day ten. Most invoices never get past the second box.

Five automations, roughly in the order they earn their keep:

AutomationTrigger → stepsThe message (Utility)
Payment reminderLibrary flow: Invoice sent → Smart Delay until the day before the due date (SKIPPED if paid) → reminder with a Pay invoice button“Hi Amaka, a quick reminder that invoice INV-0042 for $149.97 is due tomorrow. Pay here: [link]. Ignore this if you’ve already paid.”
Overdue escalationLibrary flow: Invoice overdue (fires once) → Send Payment Link → wait 3 days → tag “follow up” and notify a teammate“Hi Amaka, invoice INV-0042 for $149.97 was due on Friday. Here’s the link if you’d like to settle it now: [link]. Reply if there’s a problem and we’ll sort it.”
Receipt and thank-youPayment succeeded (or Invoice paid) → send the receipt → optional wait → review request“Thanks Amaka, we’ve received $149.97 for INV-0042.” A day later, the Google review request.
Invoice after the visitSimplest: set the service to Pay after the appointment. As a flow: Appointment completed → Create Invoice → Send Payment Link. Mark the appointment completed yourself or from a flow; the auto-complete that runs a day later doesn’t fire the trigger.The standard invoice message, right when the visit ends.
Failed subscription paymentSubscription payment failed → message (DMly retries in two days, twice, then pauses the subscription)“Hi Tunde, your membership payment didn’t go through. Update your card here: [link]. We’ll retry automatically in two days.”

Two reassurances about reminders, because they’re where people hesitate. A reminder the day before the due date, phrased as help rather than pursuit, collects most invoices without a human ever typing, and it’s a transactional message about the customer’s own bill, squarely in Meta’s Utility lane. And opt-outs are honoured on every automated send: a contact who has typed STOP won’t get flow messages, and you reply to them by hand instead.

When billing repeats, stop invoicing

Memberships, retainers and termly fees don’t need a monthly invoice ritual. Create a Plan, then Finance → Subscriptions → New subscription: pick the client and plan, optionally override the price, start it, and any credits the plan grants land immediately. With Set up auto-charge, the client saves a card once through a link you never see the details of, and each billing date DMly charges the card, rolls the period, re-grants credits, issues an invoice already marked paid and sends the receipt. Renewal reminders go out three days ahead, failed charges retry twice at two-day intervals before the subscription pauses, and the three message toggles (Renewal reminder, Payment receipt, Payment failed) ship switched on. Without auto-charge, Share subscription link bills each cycle by pay link instead, though credits are only re-granted on auto-charged renewals. Cancelling stops future billing and refunds nothing.

One more lever for the curious: DMly’s MCP server exposes invoice tools (create_invoice, send_invoice, record_payment, list_invoices, get_revenue_summary), so an AI assistant like Claude connected to your workspace can raise and send Tuesday’s invoice from one sentence.

The takeaway: statuses tell you what needs a decision, the three views answer questions without a spreadsheet, and two library flows plus a receipt automation retire the part of invoicing you liked least.

The Same Loop Behind Seven Different Counters

The WhatsApp invoice loop never changes; the rhythm does. Here’s how the loop tends to sit in the businesses that ask us about invoicing most, and the one habit that matters in each.

The businessWhat becomes an invoiceThe habit that gets it paid
Hair & beauty studiosBridal and group packages, with the deposit as a part payment; retail (the serum, the aftercare kit) as product lines.Send before the client leaves the chair, while the window is open and the moment is warm.
Clinics & dental practicesA treatment plan as one invoice settled across visits; single consultations on Pay after the appointment.Let the statement, not memory, answer “what have I paid so far?”
Tutors & small schoolsA ten-lesson block as one line with quantity ten; termly fees as subscriptions.Invoice the block before lesson one; parents pay in the chat where they ask about homework.
Gyms & studiosMemberships as auto-charged subscriptions; PT packs as invoices; day passes through the QR at the desk.Keep the failed-payment message on; it recovers cards without an awkward conversation.
Caterers & bakersEvent orders with a deposit now and the balance before the date.Put “balance due 7 days before the event” in the notes, and let the reminder enforce it.
D2C brands in the DMsBespoke and wholesale orders that never fit the store checkout; the pay link doubles as checkout for Instagram enquiries.Record bank transfers the moment they land, so reminders stop themselves.
Mobile tradesCallout plus parts as separate lines; a deposit before parts are ordered; cash on completion recorded from the van.Ask for the invoice number as the transfer reference, every time.

Product-heavy businesses should set up the catalogue properly first, because the same items drive orders from your WhatsApp catalogue; and if your selling happens mostly in the DMs, the D2C playbook shows where invoicing fits in the wider journey.

Nine WhatsApp Invoice Habits of Businesses That Get Paid on Time

  1. Send while the conversation is warm. Right after the job, inside your customer’s 24-hour window: the document is one tap away, the moment still carries goodwill, and until 1 October 2026 Meta charges nothing for the message.
  2. Keep money messages strictly transactional. Name, number, amount, link, one human sentence. Promotions in a utility message get it rebilled as Marketing and make paying feel like being sold to.
  3. Set short, real due days. Seven days is generous for work already delivered, and the QuickBooks numbers above suggest the terms themselves shape how late you’re paid. No due date means no Overdue, no escalation and no “who owes me” filter.
  4. Name line items the way customers think. Fix the catalogue names once; every invoice inherits them.
  5. Put the boring essentials in the notes. Bank details, the reference request, the deposit policy. Answered before asked.
  6. Save your answers to payment questions. “Can I pay by transfer?”, “Can I pay half now?” recur daily; put them in saved replies so every teammate answers alike in seconds.
  7. Look like a business worth paying. A complete WhatsApp Business profile and a branded PDF with your logo and address do more for payment speed than any clever reminder copy.
  8. Record offline payments the day they arrive. A transfer recorded on Tuesday stops Wednesday’s reminder embarrassing you.
  9. Reconcile weekly, self-test monthly. Ten minutes on the Payments ledger and the Overdue filter each week; once a month, invoice your own number, pay it, and watch it flip to Paid. Providers rotate keys and Meta re-reviews templates; a five-minute test catches it before a customer does.

When the Loop Jams

Nine symptoms cover nearly every support conversation about WhatsApp invoicing, and most have one-line fixes.

SymptomLikely causeFix
Customer paid, invoice still unpaidThe webhook endpoint was never added at the provider, or the secret or environment is wrongAdd the URL from the gateway tile in the provider dashboard; check live vs test keys. Record the payment manually meanwhile so reminders stop.
Invoice shows Sent but nothing arrivedTemplate not yet Approved and the customer’s window was closed, so DMly sent nothingCheck the Templates page and Refresh templates; ask the customer to message you (which opens the window), or wait for approval and resend. Billing-side template failures are covered in our guide to WhatsApp Cloud API billing errors.
Can’t generate a pay linkNo gateway connected, no contact attached, the balance is zero, or the invoice is VoidConnect a gateway, attach the contact, or accept there’s nothing to pay.
Nothing ever turns OverdueDefault due days is still 0, so invoices carry no due dateSet a real default in Finance → Settings; it applies to new invoices.
Wrong price on a sent invoicePrices lock at creation and sent invoices can’t be editedVoid it (the unpaid balance is credited back) and issue a corrected one.
Totals look offA service-level tax rate overrides the workspace default; coupons discount the total including tax; shipping is untaxed by defaultCheck the item’s tax rate, then the coupon, then the Apply tax to shipping toggle.
Payment went to the wrong providerCharge through is still on First connected gateway, so the oldest connection mints the linksSet Charge through under Finance, Settings, Gateways, then disconnect what you no longer want.
Refund recorded, customer has no moneyDMly’s refund is bookkeeping onlyIssue the actual refund in the provider’s dashboard, then keep the DMly record.
Gateway tile shows ErrorCredentials expired or rotated; admins got the “Action needed” emailPaste fresh keys and re-test with a small payment.

And the softest jam of all: a customer who simply doesn’t pay. The reminder and escalation flows take the first three nudges off your plate without anyone feeling pursued. After that it’s a phone call, a payment plan (part payments make one easy to offer), or a decision to let it go with the relationship intact.

What a WhatsApp Invoice Costs You to Assemble Without DMly

Nothing in this guide strictly requires DMly. It requires an invoicing app, a payment link tool, a WhatsApp Business Platform provider with managed template handling, an automation tool that can see invoice due dates, and a CRM where the contact, the chat and the money agree with each other. The pitch for DMly is that this is one system rather than five, built for the businesses in the table above, sold alongside the team inbox, AI agents, CRM, bookings, orders, subscriptions and loyalty it reconciles with.

What you needChat tool + separate invoicing appDMly
Creating the invoiceIn another app, re-typing the customer’s detailsFrom the chat or profile, contact pre-selected, catalogue lines
Sending on WhatsAppAttach a PDF by hand; template compliance is your problemManaged Utility template, public PDF page, window rules handled
Getting paidA link from the payments app; reconcile by handSix gateways, balance-due links, webhook reconciliation, manual methods in the same ledger
Deposits and part paymentsTwo invoices, or a spreadsheetOne invoice, Partially paid status, link re-minted for the balance
RemindersCalendar entries reminding you to remind themLibrary flows on Invoice sent and Invoice overdue that skip themselves when paid
Knowing who owes whatCross-referencing two systemsPayments ledger, per-client statements, Amount due on the profile

Invoices and payments are included in every DMly plan, the trial runs 7 days with every feature and no card, and DMly adds no markup on WhatsApp: you pay Meta’s conversation rates directly and the provider’s processing fee on payments, nothing on top.

Send your first invoice

Connect WhatsApp, pick a client, add a line, send. Then pay yourself once to watch the loop close.

Send your first invoice

If your invoicing spans channels beyond WhatsApp, our companion piece on invoicing from chat covers the channel-agnostic version of this workflow.

Frequently Asked Questions

Can I send a WhatsApp invoice without the Business API?

You can attach a PDF and paste a payment link by hand from the free WhatsApp Business app. What you can’t get that way is a template that reaches customers outside the 24-hour window, a pay link that follows the balance due, or an invoice that marks itself Paid when money arrives. The connected loop is what the official API through a platform like DMly adds.

Does my customer need an app or a login to pay?

No. The message links to a public page where they can view or download the invoice PDF without logging in, and the pay link opens your provider’s hosted checkout in their browser. Payment happens at the provider, not inside WhatsApp itself.

What does a WhatsApp invoice cost to send?

Two possible charges, neither from DMly. Meta bills per delivered template message when your customer’s window is closed. Utility templates inside an open window and free-form messages cost nothing until 1 October 2026; from that date both are billed at your market’s utility rate, which our guide to the October WhatsApp pricing change covers. DMly passes Meta’s rates through without markup either way. Your payment provider charges its usual processing fee on the payment itself.

Which payment gateways can I connect?

Stripe, PayPal, Paystack, Razorpay, MyFatoorah and Mercado Pago as of August 2026, with the money settling in your own provider account. A provider not on the list still works manually: paste its pay link into the chat and record the payment in DMly when it arrives; you lose only the automatic reconciliation.

Can I take a deposit and let the customer pay the rest later?

Yes. Raise the full invoice, take the deposit as a part payment, and the invoice sits at Partially paid with the pay link re-minted for the balance. For appointment deposits, use the service’s Pay before booking mode, which holds the slot for 15 minutes while the customer pays.

Can I automate WhatsApp invoice reminders?

Yes, without building anything. DMly’s template library ships an Invoice payment reminder flow (waits until the day before the due date, sends a Pay invoice button, skips itself if paid) and an Overdue invoice escalation flow (fires once when the invoice goes overdue, sends the pay link, waits three days, then flags a human). Install, reword, publish.

Can I edit an invoice after I’ve sent it?

No. Prices lock at creation, and a sent invoice can’t be edited or deleted. Void it instead: the unpaid balance is credited back on the client’s statement, loyalty points from the sale are taken back, and you issue a corrected invoice under a new number.

The Second Biography

Back to the invoice from the top of this guide, reborn on WhatsApp. Created between clients, from a catalogue, in under a minute. Delivered into a conversation that was already open, as a document, a link and a record. Paid that evening from the sofa, at a checkout that asked for exactly the right amount. Receipted, statemented and reconciled by machinery that never mentions it. The reminder drafted for day six was never sent, because there was nothing left to remind anyone about.

Same work, same customer, same money. The only thing that changed is where the bill lived. Set up the loop this week, invoice yourself once to prove it closes, and let the follow-ups become something your system does instead of something you dread.

DT
DMly Team
Writer at DMly

Writing about WhatsApp automation, bookings and growth for local business.

Turn WhatsApp into your busiest channel.

Start free and run message, bookings, payments and reviews in one place.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top