WhatsApp API: message cost, the 24-hour window and fallback_template

Last updated: 27 September 2026 · 7 min read

Meta charges every time you send a template message, while plain text sent inside the 24-hour window is free. Sending the same notifications in the right order cuts the cost several times over.

Steps

  1. 1

    Prices

    • UTILITY (orders, delivery, payments, reminders): 0.036 AZN
    • AUTHENTICATION (OTP, sign-in confirmation): 0.036 AZN
    • MARKETING (campaigns, discounts, announcements): 0.165 AZN
    • Free text inside the window: free

    This is Meta's per-message rate, and Clomni adds no fee. MARKETING is 4.6 times more expensive than UTILITY, so create order, delivery and reminder templates in Meta as UTILITY. The category affects both the price and the chance of approval.

  2. 2

    The 24-hour window

    The window opens for 24 hours from the moment the customer writes to you. During that time you can send them any text for free. When the window is closed, you can send only an approved template, and each template is paid for separately.

    A template you send does not open the window. The customer opens it: by replying, or by tapping a quick reply button in the template.

  3. 3

    One request with fallback_template

    Put text (the text) and fallback_template (the template to send when the window is closed) in the same request. Clomni checks the window itself:

    • if it is open, the text goes out and the response has sent_as: "session" (free);
    • if it is closed, the template goes out, sent_as: "template" (paid);
    • if there is no fallback_template and the window is closed, nothing is sent and 422 comes back: no paid message goes out without you knowing.

    fallback_template has the same structure as template: name, language, parameters.

    {
      "channel_id": 159,
      "phone_number": "+994 50 123 45 67",
      "text": "Your parcel is with the courier. It will arrive today by 18:00.",
      "fallback_template": {
        "name": "kargo_status",
        "language": "az",
        "parameters": { "body": { "1": "AZ-10422", "2": "with the courier" } }
      }
    }
  4. 4

    Cargo example: 5 notifications, 1 payment

    Over a day, 5 notifications go out for one parcel: “received”, “arrived at the warehouse”, “cleared customs”, “with the courier”, “delivered”. Sending each one as a separate template means 5 payments. The right way:

    • send the first notification with a template that has a quick reply button, for example “Track parcel” or “Yes, keep me posted” (1 payment);
    • when the customer taps the button, the 24-hour window opens;
    • send the other notifications as plain text: it is free and needs no approval;
    • if the next notification falls after 24 hours, the API switches to fallback_template by itself.
  5. 5

    The numbers

    1,000 parcels, 5 notifications a day:

    • each notification as a separate template: 180 AZN a day, 5,400 AZN a month (30 days), 65,700 AZN a year;
    • with 1 template and 4 free texts: 36 AZN a day, 1,080 AZN a month, 13,140 AZN a year;
    • savings: 144 AZN a day, 4,320 AZN a month, 52,560 AZN a year.

    This assumes every customer taps the button. In practice 60-80% do, so the real saving is about three quarters of this amount.

    A MARKETING campaign to 10,000 people costs 10,000 × 0.165 AZN = 1,650 AZN. The next 24 hours of messages with a customer who replies or taps a button are free.

  6. 6

    What goes out when

    • The customer wrote in the last 24 hours or tapped a template button: text goes out, free.
    • The window is closed and there is a fallback: fallback_template goes out, 0.036 AZN (utility) or 0.165 AZN (marketing).
    • The window is closed and there is no fallback: a 422 error, nothing is sent, nothing is charged.
    • First contact: a template, 0.036 AZN for OTP, 0.165 AZN for a campaign.
  7. 7

    Check the window in advance

    If you are preparing many notifications, find out in advance which numbers have an open window: those are free.

    curl -s "https://api.clomni.ai/v1/accounts/{account_id}/whatsapp/messages/window?channel_id=159&phone_number=%2B994501234567" \
      -H "Authorization: Bearer <API_ACARI>"

    Response:

    {
      "open": true,
      "last_inbound_at": "2026-08-07T09:15:00Z",
      "expires_at": "2026-08-08T09:15:00Z",
      "conversation_id": 1042
    }

    open: false with last_inbound_at: null means this number has never written to you: the first message has to be a template.

Document