# How much does a WhatsApp message cost in Africa? (2026)

URL: https://wa.genuka.com/en/docs/guides/whatsapp-pricing-africa
Language: English

> How much a WhatsApp Business message costs in Africa in 2026: Meta's rates by country and category, in USD, EUR and CFA francs, with a worked example.

*Last updated October 8, 2026 — Meta rates in effect since October 1, 2026.*

Meta charges for every delivered WhatsApp Business message, by category and by the recipient's
country. In Cameroon, Côte d'Ivoire, Senegal, Kenya and the 36 other "Rest of Africa" countries, a
marketing message costs $0.0225 (€0.0186, about 12.20 CFA francs); a utility, authentication or
service message costs $0.004 (€0.0033, about 2.16 CFA francs).

The first 1,000 service messages on each number stay free every month. Meta bills all of it
directly to your own WhatsApp Business Account (WABA): Genuka WA, a Meta Tech Provider, adds no
markup and charges a separate subscription per number.

## How does Meta charge for WhatsApp messages in 2026?

Since July 1, 2025, Meta charges **per message**, and only when the message is **delivered**. The
price depends on two things: the message's category and the country calling code of the
recipient's number. Messages your customers send you are never charged.

Two rules changed on October 1, 2026. Service messages — your free-form replies, outside
templates — are paid again, after being free since November 1, 2024. And utility templates sent
inside the 24-hour window the customer opened, free since July 1, 2025, are now charged too. On the
same day, Morocco left the "Rest of Africa" group for a higher rate, and South Africa's utility and
authentication rates went up.

| Category            | What it is                                                        | When you can send it           | Charged by Meta                                        |
| ------------------- | ----------------------------------------------------------------- | ------------------------------ | ------------------------------------------------------ |
| Marketing           | Promotional template: offer, abandoned-cart reminder, new arrival | Any time                       | Every delivered message                                |
| Utility             | Transactional template: order confirmation, delivery update       | Any time                       | Every delivered message, inside the 24-hour window too |
| Authentication      | One-time code (OTP) template                                      | Any time                       | Every delivered message                                |
| Service             | Free-form message (text, image, buttons…) replying to a customer  | Only inside the 24-hour window | Beyond 1,000 per number per month                      |
| Meta Business Agent | Reply produced by Meta's own AI agent                             | Only inside the 24-hour window | Per token: $2 per million tokens                       |

A free-form message sent through the Genuka WA API is a service message, whether a person wrote it
or your own AI generated it: Meta files every non-template message that does not go through its
Meta Business Agent platform under "service". Two exceptions: AI Providers are charged differently
(Meta's "AI Providers" pricing policy), and eligible government and non-profit organizations keep
their service messages free beyond the free tier through December 31, 2027.

> [!WARNING]
> **You pay for the category Meta applied**
>
> Meta charges the template's category at the time it is sent, and can change that category after
> approval: a template approved as utility but judged to be marketing is recategorized through an
> automatic category update. Review your templates' categories after every approval, then
> regularly: a template filed as marketing costs more than five times a utility one in "Rest of
> Africa".

## Which WhatsApp messages are still free?

* **Messages you receive** from customers, however many.
* **The first 1,000 service messages on each number, every month.** The count resets on the 1st
  of the month at midnight in the WhatsApp account's timezone, and unused messages do not roll
  over.
* **Everything sent inside a free entry point window.** When a customer messages you from a
  Click to WhatsApp ad on the Android or iOS app and you reply within 24 hours, this window opens
  and can stay open for up to 7 days. Marketing, utility, authentication and service messages are
  not charged while it is open.
* **A message that is not delivered** is not charged.

> [!WARNING]
> **No payment method, nothing past the free tier**
>
> If your WhatsApp Business Account has no payment method, Meta delivers the month's 1,000 free
> service messages and nothing after that. Template sends fail with Meta error
> [`131042`](https://wa.genuka.com/en/docs/errors/131042), which is about the payment method. Add a card in
> [Meta's Billing Hub](https://business.facebook.com/latest/billing_hub/payment_methods/) before
> your first send.

## How much does a WhatsApp message cost in each African country?

Meta publishes one rate card per currency. The first table is Meta's euro rate card, converted to
CFA francs at the fixed parity of €1 = 655.957 FCFA, which holds for both the Central African
(XAF) and the West African (XOF) franc. Every amount is per delivered message.

| Market                                                    | Marketing            | Utility              | Authentication       | Auth. international  | Service (1)          |
| --------------------------------------------------------- | -------------------- | -------------------- | -------------------- | -------------------- | -------------------- |
| Rest of Africa (Cameroon, Côte d'Ivoire, Senegal, Kenya…) | €0.0186 (12.20 FCFA) | €0.0033 (2.16 FCFA)  | €0.0033 (2.16 FCFA)  | —                    | €0.0033 (2.16 FCFA)  |
| Nigeria (+234)                                            | €0.0428 (28.07 FCFA) | €0.0056 (3.67 FCFA)  | €0.0056 (3.67 FCFA)  | €0.0622 (40.80 FCFA) | €0.0056 (3.67 FCFA)  |
| Egypt (+20)                                               | €0.0533 (34.96 FCFA) | €0.0030 (1.97 FCFA)  | €0.0030 (1.97 FCFA)  | €0.0538 (35.29 FCFA) | €0.0030 (1.97 FCFA)  |
| South Africa (+27)                                        | €0.0314 (20.60 FCFA) | €0.0079 (5.18 FCFA)  | €0.0079 (5.18 FCFA)  | €0.0166 (10.89 FCFA) | €0.0079 (5.18 FCFA)  |
| Morocco (+212)                                            | €0.0342 (22.43 FCFA) | €0.0190 (12.46 FCFA) | €0.0190 (12.46 FCFA) | €0.0669 (43.88 FCFA) | €0.0190 (12.46 FCFA) |
| Other (DRC, Guinea…) (2)                                  | €0.0500 (32.80 FCFA) | €0.0064 (4.20 FCFA)  | €0.0064 (4.20 FCFA)  | —                    | €0.0064 (4.20 FCFA)  |

If your WhatsApp Business Account is billed in dollars, this is Meta's USD rate card:

| Market         | Marketing | Utility | Authentication | Auth. international | Service (1) |
| -------------- | --------- | ------- | -------------- | ------------------- | ----------- |
| Rest of Africa | $0.0225   | $0.0040 | $0.0040        | —                   | $0.0040     |
| Nigeria        | $0.0516   | $0.0067 | $0.0067        | $0.0750             | $0.0067     |
| Egypt          | $0.0644   | $0.0036 | $0.0036        | $0.0650             | $0.0036     |
| South Africa   | $0.0379   | $0.0095 | $0.0095        | $0.0200             | $0.0095     |
| Morocco        | $0.0414   | $0.0230 | $0.0230        | $0.0811             | $0.0230     |
| Other          | $0.0604   | $0.0077 | $0.0077        | —                   | $0.0077     |

(1) Beyond the 1,000 free service messages per number per month. (2) See the next section.

Three things to know when reading these cards:

* **Meta publishes a fixed card per currency** and bills each account in its own currency, at that
  card's rates, not at the day's exchange rate. Your account is billed in the currency chosen when
  it was created, and after that only Meta's currency migration API can change it. Coexistence
  accounts (a number kept on the WhatsApp Business app) are not eligible for this API, so pick the
  currency when the account is created. Only the euro card converts to CFA francs at a fixed rate;
  a dollar account depends on the rate your bank applies.
* **The "authentication-international" rate only targets large senders based abroad.** Meta
  applies it only to businesses that send more than 750,000 messages outside the customer service
  window over a rolling 30 days to the markets concerned, and only to recipients in a country
  other than their own. A Cameroonian small business sending codes to Nigeria pays the regular
  authentication rate.
* **Marketing weighs the most.** In "Rest of Africa", a marketing message costs 5.6 times a
  utility one.

## Which African countries are billed at the "Rest of Africa" rate?

What counts is the calling code of the **recipient's** number, not the country your business is in.
Meta groups 40 countries under "Rest of Africa":

Algeria, Angola, Benin, Botswana, Burkina Faso, Burundi, Cameroon, Chad, Republic of the Congo
(Brazzaville), Eritrea, Ethiopia, Gabon, Gambia, Ghana, Guinea-Bissau, Côte d'Ivoire, Kenya,
Lesotho, Liberia, Libya, Madagascar, Malawi, Mali, Mauritania, Mozambique, Namibia, Niger, Rwanda,
Senegal, Sierra Leone, Somalia, South Sudan, Sudan, Eswatini, Tanzania, Togo, Tunisia, Uganda,
Zambia and Zimbabwe.

* **Morocco left the group on October 1, 2026.** It now has its own, more expensive line and an
  authentication-international rate.
* **Nigeria, Egypt and South Africa** each have their own rates.
* **A country missing from Meta's list is billed at the "Other" rate.** That is the case for
  several countries you would expect in the African group: the Democratic Republic of the Congo
  (+243), Guinea (+224), the Central African Republic (+236), Equatorial Guinea (+240), Djibouti
  (+253) and Mauritius (+230). A marketing message there costs €0.05, or 32.80 FCFA: more than
  twice the "Rest of Africa" rate. A merchant in Douala messaging a +243 customer therefore pays
  the "Other" rate.

## Do WhatsApp rates go down with volume?

Yes, but only for utility and authentication. Meta counts each month's charged messages per market
and per category, adding up every WhatsApp account in your business portfolio. Marketing and
service have no tiers, and free messages do not count.

"Rest of Africa" tiers on the euro card:

| Utility, messages per month | Authentication, messages per month | Rate    | Discount shown by Meta |
| --------------------------- | ---------------------------------- | ------- | ---------------------- |
| 0 to 100,000                | 0 to 300,000                       | €0.0033 | list rate              |
| 100,001 to 1,000,000        | 300,001 to 2,000,000               | €0.0031 | −5%                    |
| 1,000,001 to 4,500,000      | 2,000,001 to 10,000,000            | €0.0030 | −10%                   |
| 4,500,001 to 40,000,000     | 10,000,001 to 20,000,000           | €0.0028 | −15%                   |
| 40,000,001 to 80,000,000    | 20,000,001 to 40,000,000           | €0.0026 | −20%                   |
| Above 80,000,000            | Above 40,000,000                   | €0.0025 | −25%                   |

The lower rate applies only to the messages that fall inside that band, never retroactively to the
whole month, and the count resets every month. Nigeria, Egypt, South Africa and Morocco use the same
thresholds on their own rates. In practice, a business sending a few thousand notifications a month
always pays the list rate.

## How much does a shop in Cameroon pay each month?

Take an online shop in Douala: one WhatsApp number, customers in Cameroon (+237, so "Rest of
Africa") and a WhatsApp Business Account billed in euros. Every month it sends 1,000 order
notifications, 200 login codes and 400 free-form replies to customer questions.

| Item                                     | Volume | Meta rate                   | Monthly cost              |
| ---------------------------------------- | ------ | --------------------------- | ------------------------- |
| Order notifications (utility)            | 1,000  | €0.0033                     | €3.30 ≈ 2,165 FCFA        |
| Login codes (authentication)             | 200    | €0.0033                     | €0.66 ≈ 433 FCFA          |
| Free-form replies (service)              | 400    | free under 1,000 per number | 0 FCFA                    |
| **Meta fees**                            |        |                             | **€3.96 ≈ 2,598 FCFA**    |
| Genuka WA Growth plan, 1 number, monthly |        |                             | 10,000 FCFA               |
| **Total**                                |        |                             | **≈ 12,598 FCFA a month** |

The 1,600 outbound messages exceed the Starter allowance (500 per number per month) and fit easily
in Growth (5,000). Stay on monthly billing: on a yearly plan, the Growth allowance currently covers
the whole year, and those 5,000 messages would run out in just over three months at this pace. On a
WhatsApp account billed in dollars, the same Meta fees are 1,200 × $0.004 = $4.80.

Add a monthly promotion to 2,000 customers as a marketing template: 2,000 × €0.0186 = €37.20, about
24,402 FCFA more on the Meta side. That one campaign costs almost ten times the rest of the traffic:
marketing is what makes the bill.

> [!WARNING]
> **Two limits until the business is verified**
>
> Meta reserves authentication templates for businesses that have completed one of its scaling
> paths, usually Meta business verification. Without it, creating an authentication template fails
> with a message that wrongly blames the app: "Application does not have permission for this
> action" (see error [141010](https://wa.genuka.com/en/docs/errors/141010)). And a new business portfolio can only reach
> 250 distinct numbers per 24 hours outside the customer service window: the 2,000-customer
> promotion would take more than a week to go out. Business verification unlocks authentication
> templates, and it is one of the paths Meta offers to raise that limit. The details are in
> [WhatsApp API without Meta verification](https://wa.genuka.com/en/docs/guides/without-meta-verification).

## Who bills what: Meta or Genuka WA?

**Meta bills the messages**, directly to the customer's own WhatsApp Business Account and to the
payment method the customer added with Meta. Genuka is a Meta Tech Provider, not a BSP: we do not
resell messages, we add no markup to them, and there are no credits or wallet to top up.

**Genuka WA charges a subscription per WhatsApp number.** The base price covers the first number,
each extra number costs less, and the plan includes an allowance of outbound messages per number.
That allowance caps your sends; it is never billed per message.

| Tier       | Monthly     | Yearly (per month) | Extra number | Messages per number per period | Max numbers |
| ---------- | ----------- | ------------------ | ------------ | ------------------------------ | ----------- |
| Starter    | 5,000 FCFA  | 3,000 FCFA         | 2,500 FCFA   | 500                            | 5           |
| Growth     | 10,000 FCFA | 8,000 FCFA         | 2,200 FCFA   | 5,000                          | 15          |
| Scale      | 30,000 FCFA | 25,000 FCFA        | 1,800 FCFA   | 30,000                         | 100         |
| Enterprise | quote       | quote              | quote        | custom                         | custom      |

The message allowance applies per billing period: one month on a monthly plan. On a yearly plan it
currently covers the whole year and is not multiplied by twelve, so for a steady monthly volume,
choose monthly billing.

The same tiers exist in euros and dollars, on a price list of their own: €19, €49 and €149 (or
$19, $49 and $149) a month, or 15, 39 and 119 a month paid yearly. Every account starts with a
7-day free trial of the Growth tier, no card required. The subscription is paid by mobile money
(Genuka Pay in Cameroon, pawaPay in the other CFA franc countries we cover) or by card (Stripe).

Details are on the [pricing grid](https://wa.genuka.com/en#pricing), in [Plans & billing](https://wa.genuka.com/en/docs/billing) and, for
an AI agent, in [/pricing.md](https://wa.genuka.com/pricing.md).

## How do I check what Meta charges me?

1. ### Add a payment method with Meta

   In [Meta's Billing Hub](https://business.facebook.com/latest/billing_hub/payment_methods/), attach
   a card to the connected WhatsApp Business Account. Your Genuka WA subscription does not pay for messages.

2. ### Check the category of every approved template

   The category sets the price. List your templates with `GET /api/v1/templates?sync=true`, which
   re-reads the category Meta actually applied before answering. Without it, the list can still show
   the category requested at creation after Meta has changed it (see the
   [API reference](https://wa.genuka.com/en/docs/api) and [Templates & campaigns](https://wa.genuka.com/en/docs/campaigns)).

3. ### Read the `pricing` field on every status

   Every message status reaches your [webhooks](https://wa.genuka.com/en/docs/webhooks) with, inside `data`, the
   `pricing` object Meta attaches to it, untouched:

   ```json title="POST https://your-app.com/webhooks/whatsapp (excerpt)"
   {
     "type": "message_status",
     "field": "messages",
     "data": {
       "id": "wamid.HBgLMjM3...",
       "status": "delivered",
       "pricing": {
         "billable": true,
         "pricing_model": "PMP",
         "type": "regular",
         "category": "utility"
       }
     }
   }
   ```

   `type: "regular"` means the message is charged. `free_customer_service` marks a free message, for
   instance a service message still under the 1,000 free tier; `free_entry_point`, a message sent
   inside a free entry point window.

4. ### Add it up with the API

   `GET /api/v1/analytics?kind=pricing` returns the volume and the cost Meta reports, broken down by
   category and country. With a partner key, `connectionId` is required; with a client key, it picks
   the number, and the main number is read by default.

   **curl**

   ```bash
   curl "https://wa.genuka.com/api/v1/analytics?kind=pricing&connectionId=con_1&start=2026-10-01&dimensions=PRICING_CATEGORY,COUNTRY" \
     -H "Authorization: Bearer $GENUKA_WA_API_KEY"
   ```

   **Node.js**

   ```js
   // ES module (.mjs file or "type": "module"): this uses top-level await.
   const params = new URLSearchParams({
     kind: "pricing",
     connectionId: "con_1",
     start: "2026-10-01",
     dimensions: "PRICING_CATEGORY,COUNTRY",
   });

   const response = await fetch(`https://wa.genuka.com/api/v1/analytics?${params}`, {
     headers: { Authorization: `Bearer ${process.env.GENUKA_WA_API_KEY}` },
   });
   if (!response.ok) {
     throw new Error(`${response.status} ${await response.text()}`);
   }
   const body = await response.json();

   for (const point of body.data.points) {
     console.log(point.day, point.dimensions, point.volume, point.cost);
   }
   ```

   **Python**

   ```python
   import os
   import requests

   response = requests.get(
       "https://wa.genuka.com/api/v1/analytics",
       params={
           "kind": "pricing",
           "connectionId": "con_1",
           "start": "2026-10-01",
           "dimensions": "PRICING_CATEGORY,COUNTRY",
       },
       headers={"Authorization": f"Bearer {os.environ['GENUKA_WA_API_KEY']}"},
       timeout=30,
   )
   response.raise_for_status()

   for point in response.json()["data"]["points"]:
       print(point["day"], point["dimensions"], point.get("volume"), point["cost"])
   ```

   **PHP**

   ```php
   <?php
   $query = http_build_query([
       'kind' => 'pricing',
       'connectionId' => 'con_1',
       'start' => '2026-10-01',
       'dimensions' => 'PRICING_CATEGORY,COUNTRY',
   ]);

   $ch = curl_init("https://wa.genuka.com/api/v1/analytics?$query");
   curl_setopt_array($ch, [
       CURLOPT_RETURNTRANSFER => true,
       CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('GENUKA_WA_API_KEY')],
   ]);
   $raw = curl_exec($ch);
   $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
   if ($status !== 200) {
       exit("HTTP $status: $raw" . PHP_EOL);
   }
   $body = json_decode($raw, true);

   foreach ($body['data']['points'] as $point) {
       echo $point['day'], ' ', json_encode($point['dimensions']), ' ', json_encode($point['cost']), PHP_EOL;
   }
   ```

   ```json title="200 OK (excerpt)"
   {
     "data": {
       "kind": "pricing",
       "source": "meta",
       "granularity": "DAILY",
       "points": [
         {
           "start": 1790812800,
           "end": 1790899200,
           "day": "2026-10-01",
           "volume": 48,
           "cost": { "available": true, "amount": 0.1584 },
           "dimensions": { "pricing_category": "UTILITY", "country": "CM" }
         }
       ],
       "days": [
         {
           "day": "2026-10-01",
           "totals": { "volume": 48, "cost": { "available": true, "amount": 0.1584 } },
           "points": ["…"]
         }
       ]
     },
     "window": { "start": "2026-10-01T00:00:00.000Z", "end": "2026-10-08T09:00:00.000Z" },
     "truncated": false,
     "archivedDays": 8,
     "costAvailable": true,
     "retentionDays": 365
   }
   ```

   `days` groups the same points per day, with a daily total in `totals`. When `costAvailable` is
   `false`, Meta reported no cost for the period: that is not a zero, do not add it up as one. The API
   only reads the last 365 days from Meta (`retentionDays`). Every read is archived on Genuka's side,
   and `source=archive` returns the days a previous read already archived, including those Meta no
   longer serves. A day nobody read before it fell out of those 365 days is not archived: run this
   request at least once a month to keep the full history.

## How do I lower my WhatsApp bill?

* **Reply inside the 24-hour window.** Up to 1,000 free-form replies per number per month cost
  nothing.
* **Target your campaigns.** Marketing costs 5.6 times utility in "Rest of Africa": 500 interested
  customers beat 5,000 random recipients.
* **Bring customers in through Click to WhatsApp ads.** If you reply within 24 hours, the
  conversation that follows is free for as long as the free entry point window stays open.
* **In the CFA zone, prefer a WhatsApp account billed in euros.** The fixed parity makes the cost
  in CFA francs predictable, bank fees aside; a dollar account follows the exchange rate. Decide
  when the account is created: a coexistence account cannot switch currency later.

## FAQ

### Are WhatsApp Business messages free in Africa?

Not all of them. Messages your customers send you are free, and so are the first 1,000 free-form
replies on each number every month. Templates — marketing, utility, authentication — are charged
from the first delivered message, including inside the 24-hour window since October 1, 2026, except
inside a free entry point window opened by a Click to WhatsApp ad.

### How much does a WhatsApp OTP cost in Cameroon?

€0.0033 per delivered code on an account billed in euros, about 2.16 CFA francs, or $0.004 on a
dollar account. The rate is the same in every "Rest of Africa" country. Creating an authentication
template does, however, require the business to have completed one of Meta's scaling paths, usually
business verification.

### Does Genuka WA take a commission on messages?

No. Meta bills messages directly to your WhatsApp Business Account, at Meta's rates, with no markup
from Genuka. Genuka WA only charges a subscription per number, from 5,000 FCFA (€19) a month, or
3,000 FCFA a month paid yearly.

### Why did my Meta bill go up in October 2026?

Since October 1, 2026, Meta charges service messages beyond 1,000 per number per month, and utility
templates sent inside the 24-hour window, which used to be free. Rates also went up in Morocco,
which left the "Rest of Africa" group, and for utility and authentication in South Africa.

### Does the price depend on my country or my customer's?

Your customer's: Meta applies the rate of their number's calling code. A business in Abidjan
messaging a Nigerian customer (+234) pays the Nigeria rate.

## Sources

* Meta, [Pricing on the WhatsApp Business Platform](https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing),
  page updated September 30, 2026, and its USD and EUR rate cards "effective October 1, 2026"
  (download links in the *Rate cards and volume tiers* section).
* Meta, [Upcoming pricing updates for Meta Business Agent, service and utility messages](https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing/non-template-messages),
  page updated September 28, 2026.
* Meta, [Authentication-international rates](https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing/authentication-international-rates).
* Meta, [Change billing currency via API](https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing/change-billing-currency),
  page updated June 23, 2026 (coexistence accounts are not eligible).
* Meta, [Template categorization](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/template-categorization),
  page updated September 15, 2026 (automatic category updates).
* Meta, [Messaging limits](https://developers.facebook.com/documentation/business-messaging/whatsapp/messaging-limits).
* Meta, [Error codes](https://developers.facebook.com/documentation/business-messaging/whatsapp/support/error-codes)
  (code `131042`).
* Meta, [Analytics](https://developers.facebook.com/documentation/business-messaging/whatsapp/analytics)
  (`pricing_analytics`).
* BCEAO, [Histoire du franc CFA](https://www.bceao.int/fr/content/histoire-du-franc-cfa) (parity
  €1 = 655.957 FCFA).
* French Treasury, [Les principes et modalités de fonctionnement de la coopération monétaire](https://www.tresor.economie.gouv.fr/tresor-international/la-zone-franc/les-principes-et-modalites-de-fonctionnement-de-la-cooperation-monetaire)
  (the same fixed parity for the West and Central African CFA francs, in French).
* 360dialog, [Authentication messages](https://docs.360dialog.com/docs/resources/authentication-messages)
  (requirements for authentication templates).
* Genuka WA, [Plans & billing](https://wa.genuka.com/en/docs/billing), [/pricing.md](https://wa.genuka.com/pricing.md),
  [error 141010](https://wa.genuka.com/en/docs/errors/141010) and
  [WhatsApp API without Meta verification](https://wa.genuka.com/en/docs/guides/without-meta-verification).
