Features Add-ons Pricing Cost calculator Use cases Compare Blog

WhatsApp COD Order Confirmation: Utility or Marketing?

14 min read

The short answer

A WhatsApp cash-on-delivery confirmation that asks the customer to confirm or cancel one specific order matches Meta's Order Management utility examples. Add a discount for paying online and it becomes mixed content, which Meta's template guide counts as marketing. Since 1 October 2026 a utility template is charged even inside an open customer service window (checked October 2026).

Inbox in the Acme Retail demo workspace with a conversation list on the left, filter tabs for All, Unread, Mine and Unassigned, and an open chat where a customer asks about delivery to Bengaluru and says they will order today.

Is a WhatsApp COD order confirmation a utility template?

Yes, as long as it does one job: it names a specific cash-on-delivery order and asks the customer to confirm or cancel it. That is almost word for word one of the purposes Meta lists for utility templates under Order Management:

"Confirm, update, or cancel an order or transaction with a customer, using specific order or transaction details in the body of your message." (Meta — Template categorization)

Meta's own example for that row reads "Thank you! Your order {{order_number}} is confirmed. We will let you know once your package is on its way." The same row carries the condition: "These messages should not promote, recommend, upsell, or cross-sell products; include offers; or attempt to secure renewals."

Indian stores send this message for a plain reason. A cash-on-delivery parcel that the customer refuses at the door goes back to the seller, which logistics teams call return to origin, or RTO. A confirmation before dispatch lets the customer say no before the parcel moves. If you meet an RTO-reduction percentage, ask for the study behind it; this page quotes none, because a percentage without a named study and a method is not evidence.

The trap is a variant that sounds like good service. Take a hypothetical one: "confirm your COD order, or pay online now and get 5% off." It reads like help. By Meta's rule it is a promotion attached to an order update, and the template that carries it is a marketing template.

A ladder showing that a COD template's category is decided more than once: at creation from its text, at approval, at every send from the variable values, again when a promo appears in a sent message, and after a change that clears the template's time-to-live
Approval is the first category decision, not the last one.

Which COD confirmation wordings stay utility under Meta's guide?

The ones that state facts about one order and offer the customer a decision about that order. Meta's utility criteria require a template to be non-promotional and, in addition, "either specific to or requested by the user (clearly related to their order, account, services, or transactions) OR essential or critical to the user". A COD confirmation qualifies through the first branch. Everything below is read against Meta's own examples on the categorisation page:

What the message says How Meta's guide reads it Meta's basis
Order #1042, cash on delivery, INR 1,299. Confirm or cancel? Utility "Confirm, update, or cancel an order"
The same, plus "Pay online instead", no incentive Not ruled on No example either way
The same, plus "Save 5% if you prepay" Marketing "an order update with a promo"
The same, plus "See our new arrivals" Marketing Must not "cross-sell products"
"Sorry for the delay, a credit is in your account" Marketing Listed under Retargeting
A body that is only a variable Marketing "contents are unclear"

Two rows deserve a closer look. The delay apology is the easiest to miss: Meta files "We apologize for the delay in your {{package}} delivery. We have deposited a {{credit}} to your account, available immediately." under marketing, in its Retargeting examples, a row Meta describes as messages that "Promote or recommend offers, products, or services". A goodwill credit is an offer. And the "{{1}}" row matters to anyone tempted to build one flexible template whose whole body arrives at send time; Meta lists "Templates where contents are unclear (for example, where contents are only “{{1}}” or “Congratulations!”)" as marketing.

Note that Meta adds a caveat beside its examples: "Examples are illustrative only. Templates that contain similar content, or the example text above, might be categorized differently based on the exact content." The table above is a reading, not a guarantee.

Can a COD confirmation offer a discount for paying online instead?

Not inside a utility template. Meta's guide lists, among templates "also considered marketing":

"Templates with mixed content (for example, both utility and marketing, such as an order update with a promo or a feedback survey with promotional content)." (Meta — Template categorization)

Meta's utility page states the consequence without hedging: "If you attempt to create or update a utility template with marketing material, the template will automatically be re-categorized as a marketing template." (Meta — Utility templates)

That leaves two honest designs.

The first keeps the confirmation factual and sends any prepaid offer as its own marketing template, as a separate decision with its own cost and its own consent question, covered in what WhatsApp requires from an opt-in. Mixing them saves one message and reprices every confirmation you send.

The second offers the switch to prepaid with no incentive at all, as an option on the same order. Meta's categorisation page has no example of that wording; searching it on 17 October 2026 for pay online, prepaid and cash on delivery found nothing, so nobody can promise how it will be read. The nearest precedents point the same way: Meta's backorder example under Order Management ends "If you wish to cancel and receive a refund, please click below", so an action on the order is allowed, and Meta files its own order details template, a message whose whole purpose is asking for payment for an order, as utility. A discount, a cashback or "free shipping if you prepay" is an offer, and an offer is the line.

How do you build a COD confirmation template with Confirm and Cancel buttons?

Create a utility template whose body carries the order's specifics and whose two quick-reply buttons carry the decision. Quick-reply buttons are, in Meta's words, "custom text-only buttons that immediately message you with the specified text string when tapped by the app user." (Meta — Template components). A utility template may carry up to 10 buttons, and a quick-reply label may run to 25 characters.

Send it to POST /<WHATSAPP_BUSINESS_ACCOUNT_ID>/message_templates:

{
  "name": "cod_order_confirm",
  "language": "en_US",
  "category": "UTILITY",
  "message_send_ttl_seconds": 21600,
  "components": [
    {
      "type": "BODY",
      "text": "Hi {{1}}, your cash-on-delivery order {{2}} for {{3}} will be delivered to {{4}}. Please confirm so we can dispatch it, or cancel if you no longer want it.",
      "example": { "body_text": [["Asha", "#1042", "INR 1,299", "12 MG Road, Bengaluru 560001"]] }
    },
    {
      "type": "BUTTONS",
      "buttons": [
        { "type": "QUICK_REPLY", "text": "Confirm order" },
        { "type": "QUICK_REPLY", "text": "Cancel order" }
      ]
    }
  ]
}

Meta requires the sample values: its components reference marks each parameter's example value "Required if using a parameter." (Meta — Template components) Every one of the four variables is a fact about the order, which is the property that keeps the template utility.

One design choice has a cost on the customer's side. It is tempting to add a "Track order" or "Change address" link next to the two quick replies. Meta's components page warns that "templates composed of 4 or more buttons, or a quick reply button and one or more buttons of another type, cannot be viewed on WhatsApp desktop clients. WhatsApp users who receive one of these template messages will be prompted to view the message on a phone instead." Keep the confirmation to quick replies only, and put links in a later message.

What arrives on your webhook when the customer taps Confirm?

A message of type button, on the same messages webhook field as any other incoming message, triggered when "A WhatsApp user taps a quick-reply button in a template message." (Meta — Button messages webhook reference). The parts that matter look like this:

{
  "context": {
    "from": "<BUSINESS_DISPLAY_PHONE_NUMBER>",
    "id": "<CONTEXTUAL_WHATSAPP_MESSAGE_ID>"
  },
  "from": "<WHATSAPP_USER_PHONE_NUMBER>",
  "id": "<WHATSAPP_MESSAGE_ID>",
  "timestamp": "<WEBHOOK_TRIGGER_TIMESTAMP>",
  "type": "button",
  "button": {
    "payload": "<BUTTON_LABEL_TEXT>",
    "text": "<BUTTON_LABEL_TEXT>"
  }
}

The join back to the order is context.id, which Meta defines as the "WhatsApp message ID of the message containing the button the WhatsApp user tapped." Save the message ID returned when you sent each confirmation against its order number, and a tap resolves to exactly one order even when the same customer has three open. Matching on phone number alone confirms the wrong parcel the day a customer orders twice.

The tap also changes what you may send next. A quick reply messages you, and Meta's pricing page says: "When a WhatsApp user messages you or calls you, a 24-hour timer called a customer service window starts." So the reply to "Confirm order" can be free-form text rather than another template. In WabaCRM the tap lands in the shared inbox as the customer's own message, showing the button's text, next to anything they typed afterwards, such as a corrected landmark.

What does each step of a COD confirmation cost since 1 October 2026?

The confirmation is a charged utility template; the tap is free; a free-form reply is a service message; a second template is charged again. Meta charges per delivered message, and only in one direction: "Meta does not charge for messages from users to businesses." (Meta — Pricing on the WhatsApp Business Platform)

Step What Meta counts it as Charged?
Confirmation template delivered Utility template Yes, per delivered message
Customer taps Confirm or Cancel Message from the user No
Your free-form reply in the window Service message From the 1,001st a month per number
A second template in the window Utility template Yes, since 1 October 2026

The bottom row is the one that changed. Until 30 September 2026 a utility template sent inside an open window was free; Meta's page now records that for those messages the pricing type "changed from free_customer_service to regular as of October 1, 2026." The detail is in what changed in service message pricing.

So the cheap way to answer a tap is a plain text reply, not a second "order confirmed" template. Service messages carry an allowance: "Each business phone number has one free tier of 1,000 delivered service messages per month." A store answering thousands of taps a day will use that allowance early in the month, but each reply is still a service message rather than a second utility template. The one case where none of this is charged is the free entry point window that follows a Click-to-WhatsApp ad, set out in the free entry point window rules; an order placed on your website does not open one. To put rupee figures on your own volumes, use the WhatsApp pricing calculator.

Can a promo inside a variable get a COD template recategorised?

Yes. Approval reviews the template you submitted, but Meta keeps reviewing what it sends:

"Automatic category updates can apply to any approved template that does not meet the template category guidelines — either because the template was not initially approved per those guidelines, or because the messages the template sends do not meet them. This includes templates whose category was previously confirmed by a review." (Meta — Template categorization)

That sentence closes an obvious loophole. A body like "Order {{2}} is ready to ship. {{5}}" passes review with a harmless sample, and then the store fills {{5}} with "Prepay now and save 5%" on every send. The template text is utility; the messages it sends are mixed content. The same applies to a festive line slipped into the name or address variable.

When it happens the template keeps working at the marketing price, which is why it can go unnoticed. The notice, the webhook and the 60-day appeal are covered in why WhatsApp changed a utility template to marketing. For a COD confirmation there is one extra cost that page does not cover: the template's delivery window.

Why should a COD confirmation stop trying to deliver after a few hours?

Because a confirmation that reaches the customer after the parcel has left is worse than none. WhatsApp keeps retrying an undelivered message for a period Meta calls time-to-live, and for a utility template the default is 30 days. Meta lets you shorten it: "Utility templates: 30 to 43200 seconds (30 seconds to 12 hours)". (Meta — Configure message time-to-live)

Set it to the gap between order and dispatch. Six hours is 21600, as in the template above. Then treat silence as an answer: "If you do not receive a delivered message webhook before the TTL is exceeded, assume the message was dropped." A dropped confirmation is not billed, because Meta charges only for delivered messages, and it tells you something useful: this customer was unreachable on WhatsApp, so call them or hold the parcel.

Templates list in the Acme Retail demo workspace showing order_shipped and appointment_reminder in the Utility category beside festive_offer and flash_sale_blast in Marketing, with Approved, Pending and Rejected status badges and a Preview button on each row
A demo templates list. The category column is the one a promo in a COD confirmation would change.

WabaCRM's template builder offers this as a "Stop trying to deliver after" field, in minutes, when the category is utility, with quick-reply buttons available on the same form. The note under that field repeats a rule of Meta's that matters more for COD than for almost any other utility message:

"If a template is reclassified by an automatic category update, the system clears the TTL value by setting it to a null value." (Meta — Configure message time-to-live)

A recategorised COD template therefore silently goes back to retrying for 30 days. Worse, it cannot be shortened again where it is sent from: Meta allows a custom validity period on marketing templates only "for marketing templates sent via Marketing Messages API for WhatsApp", with a minimum of 12 hours. A confirmation that slips into marketing loses its short delivery window as well as its price.

What happens to COD confirmations if Meta restricts your utility templates?

They can stop or be repriced along with every other utility message on the account. Meta's guide sets out escalating restrictions: "If a business is detected to be consistently misclassifying marketing templates as utility, WhatsApp may apply escalating restrictions." Two of the levels land directly on an order pipeline:

"Utility message volume on the Messaging account is capped within a 24-hour rolling window. Messages exceeding the cap are rejected. Marketing and authentication messages are not affected."

and, at the next level, "All approved utility templates on the Messaging account are recategorized to MARKETING. New utility template creation and category reviews are disabled."

For a cash-on-delivery store this is the real risk of the "save 5% if you prepay" line. It is not one template moving to a higher price. It is shipping updates, delivery-failure notices and confirmations being rejected or repriced together, at the moment a festive sale needs them most. The full set of levels and their durations is in how a template category change cut a messaging limit.

What should you do with COD orders nobody confirms?

Decide in advance and encode it in the order system, because none of the Meta pages cited here gives a figure for how many customers answer a confirmation, and no vendor's number is a substitute for your own. A workable sequence, using only the signals Meta actually sends:

  1. No delivered status before the TTL runs out. The message was dropped and nobody saw it. Call, or hold the parcel.
  2. Delivered, no tap or reply by your cut-off. You may send one reminder, but it is another utility template, charged again, so keep it as factual as the first: the order, the amount, the address, the two buttons.
  3. Cancel tapped. Cancel the order and acknowledge with a free-form reply inside the window, which is a service message.
  4. A typed reply arrives. Give it to a person. Address corrections and delivery-time requests are exactly what the confirmation exists to catch.

Measure the outcome yourself: confirmed, cancelled and silent orders against what was later refused at the door. That comparison, from your own orders, is the only RTO figure worth trusting. How the rest of an online shop's WhatsApp traffic fits together, from order updates to festive campaigns, is on the ecommerce use case.

Every Meta quotation on this page was read from Meta's own documentation on 17 October 2026. Meta changes that documentation without notice; the linked pages are authoritative and this one is not.

Questions people also ask

Can the COD confirmation go out automatically the moment an order is placed?

Yes. The usual pattern is that your store's order event calls your own server, which sends the approved template through the Cloud API messages endpoint with the order's values in the body variables. Because the customer placed the order on your website rather than in WhatsApp, there is normally no open customer service window, so it has to be a template, and a utility one if it stays factual. Store the message ID that comes back against the order, because that ID is what the customer's later button tap points to.

What if the customer types a reply instead of tapping a button?

It arrives as an ordinary text message rather than a button message. It still opens a 24-hour customer service window, because Meta starts that timer whenever a WhatsApp user messages you. Typed replies are often the useful ones, such as a corrected landmark or a request to deliver after six, so route them to a person rather than trying to read yes or no out of free text. Your answer inside the window can be a free-form service message.

Should a COD confirmation include the delivery address?

It is the most useful detail you can put in it. Meta's Order Management description asks for specific order or transaction details in the body of the message, and an address is exactly that. It also gives the customer the one chance to spot a wrong pin code or a missing flat number before the parcel leaves, which a bare confirm-or-cancel prompt cannot. Keep the address in a body variable filled from the order, and keep everything around it factual, because the whole body is what Meta reads when it decides the category.

Can one template serve both prepaid and cash-on-delivery orders?

It can, but two templates are simpler to keep honest. A prepaid order has nothing to confirm before dispatch, so Confirm and Cancel buttons on it invite cancellations of orders that are already paid. A variable that says cash on delivery or paid online is a fact about the order and fits Meta's utility description. What to avoid is a shared template whose variables sometimes carry an offer, because Meta can recategorise a template on the messages it actually sends, not only on the text it approved.

Is a COD confirmation the same as WhatsApp's order details payment message?

No. An order details template is a separate, India-only template type with a fixed Review and Pay button that carries an itemised bill and a payment method, so the customer can pay inside WhatsApp. Meta categorises it as utility. A COD confirmation is an ordinary utility template with quick-reply buttons that asks the customer to confirm or cancel an order they will pay for at the door. The two can coexist in one store, but the order details route needs a payment gateway integration and the COD confirmation does not.

Keep reading

Your customers are already on WhatsApp

₹999 once for 1,000 contacts — no monthly fee and no expiry. Signing up is free and needs no card, so you can connect your number and read what arrives before you pay. Connecting takes as long as Meta's own review of it.

Sign up with your company email address. No sales call, no onboarding fee, nothing to schedule.

Why this is safe to point your customer list at

Payments are processed by Razorpay on their own checkout — your card details are never entered on, or stored by, WabaCRM. Every inbound WhatsApp webhook is checked against its signature before it is trusted.

Tech Provider is a Meta platform access tier — not a partnership, a reseller agreement or an endorsement.