Updated on October 25, 2026
The WhatsApp Cloud API is the version of the official WhatsApp Business API hosted by Meta itself: you don’t install any server, you just make HTTP calls to the Graph API (graph.facebook.com) and receive events through webhooks. Since October 23, 2025, when the On-Premises API was shut down, it has been the only way to run the WhatsApp Business Platform. Meta charges per delivered message, with the price set by the message category and the recipient’s country.
This article covers the technical side of the Cloud API: components, how a message flows, limits and cost. For a comparison with unofficial libraries, see official vs unofficial WhatsApp API.
What the WhatsApp Cloud API is
Meta calls the set of APIs that lets companies talk to customers on WhatsApp from their own systems the WhatsApp Business Platform. The Cloud API is the part of that platform that sends and receives messages, places calls and manages groups, according to the Cloud API overview.
“Cloud” means the messaging infrastructure runs at Meta. Your code doesn’t hold a session, doesn’t keep a connection open to WhatsApp and doesn’t depend on a phone being online. It only:
- makes authenticated HTTPS requests with an access token;
- receives requests from Meta on a webhook endpoint.
That’s different from libraries that emulate WhatsApp Web (Baileys, WPPConnect), which keep a session open after you scan a QR code.
The end of the On-Premises API
Until 2025 there were two official ways to run the platform: the Cloud API, hosted by Meta, and the On-Premises API, where the business (or its provider) hosted a client in its own containers. Meta retired the second one in stages, according to the On-Premises API sunset page:
| Date | What changed |
|---|---|
| January 9, 2024 | New features shipped only on the Cloud API; On-Premises got bug fixes only |
| July 1, 2024 | Business phone numbers can only be registered for the Cloud API |
| October 23, 2025 | The last On-Premises client version expired; messages for numbers still registered on it stopped being delivered |
In practice, “official WhatsApp API”, “WhatsApp Business API” and “Cloud API” now all point to the same product. Old tutorials about installing a WhatsApp Docker container are out of date.
Platform components
Meta’s documentation splits the platform into a few pieces. Each one shows up in different endpoints and permissions:
| Component | What it does |
|---|---|
| Cloud API | Send and receive messages, place calls and manage groups |
| Business Management API | Manage messaging accounts (WABA), phone numbers, templates, billing and analytics |
| Marketing Messages API | Send optimized marketing messages with delivery and conversion metrics |
| Webhooks | Notify your server about incoming messages and status changes, in JSON |
| Meta Business Agent | Configure Meta’s own AI agents to answer conversations |
And a few objects you’ll use all the time:
- Business portfolio (formerly Business Manager): the company’s account at Meta.
- Messaging account (WABA,
waba_id): groups phone numbers and templates. - Business phone number (
phone_number_id): this ID goes in the send URL. - Meta app: the app created in the developer dashboard, linked to the portfolio, which holds permissions and webhooks.
- Access token: in production, a system user token with the
whatsapp_business_messaging,whatsapp_business_managementandbusiness_managementpermissions. Details in permanent token with a system user.
How sending a message works
Sending is a POST to /{phone_number_id}/messages. The example below sends a template to a Brazilian number straight to the Graph API (replace the version with the current one listed in Meta’s changelog):
curl -X POST "https://graph.facebook.com/v26.0/PHONE_NUMBER_ID/messages" \
-H "Authorization: Bearer SYSTEM_USER_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"messaging_product": "whatsapp",
"to": "5511999999999",
"type": "template",
"template": {
"name": "order_confirmation",
"language": { "code": "en_US" },
"components": [
{ "type": "body", "parameters": [ { "type": "text", "text": "Maria" } ] }
]
}
}'
The response returns the recipient’s wa_id and the message ID (wamid):
{
"messaging_product": "whatsapp",
"contacts": [{ "input": "5511999999999", "wa_id": "5511999999999" }],
"messages": [{ "id": "wamid.HBgLNTUxMTk5OTk5OTk5..." }]
}
That response only confirms Meta accepted the message. Delivery, read and failure come later through the webhook, as explained in message status via webhook. More send examples in cURL, Node.js and Python are in how to send a message with the WhatsApp API.
Two rules that shape your code
- 24-hour customer service window. When the customer writes to you, you can reply with free-form messages for 24 hours. Outside that window, only approved templates.
- Templates have categories. Marketing, utility or authentication. The category sets the price and is reviewed by Meta.
How receiving works: webhooks
When a customer replies, Meta sends a POST to your endpoint with the whatsapp_business_account object. Messages and statuses sit inside entry[].changes[].value:
{
"object": "whatsapp_business_account",
"entry": [{
"id": "WABA_ID",
"changes": [{
"field": "messages",
"value": {
"messaging_product": "whatsapp",
"metadata": { "phone_number_id": "PHONE_NUMBER_ID" },
"contacts": [{ "wa_id": "5511999999999", "profile": { "name": "Maria" } }],
"messages": [{
"from": "5511999999999",
"id": "wamid.HBgL...",
"timestamp": "1761400000",
"type": "text",
"text": { "body": "I want to track my order" }
}]
}
}]
}]
}
Your server should answer quickly with 200, validate the payload signature and process the event in a queue.
Cloud API limits
| Limit | Value | Source |
|---|---|---|
| Throughput per number | Up to 80 messages per second by default | Throughput |
| Higher throughput | 1,000 mps, automatic for eligible numbers (unlimited messaging limit, 100K unique users in 24 h, quality yellow or better) | Throughput |
| Coexistence numbers | Fixed 20 mps | Throughput |
| Messaging limit | 250 unique recipients in 24 h outside the service window for new portfolios; then 2,000, 10,000, 100,000 and unlimited | Messaging limits |
| Numbers per portfolio | 2 at first; 20 after business verification or reaching the 2,000 limit | Phone numbers |
Going over your throughput returns error 130429 until your rate drops back. The messaging limit is calculated per business portfolio and shared by all its numbers.
How much the WhatsApp Cloud API costs
There’s no monthly fee from Meta and no hosting charge. You pay per delivered message, according to the pricing page:
- only business-to-user messages are charged; what the customer sends is free;
- the price depends on the category (marketing, utility, authentication, service) and on the recipient’s country;
- each phone number gets 1,000 free service messages per month;
- messages inside the free entry point window, opened by click-to-WhatsApp ads, are free (except Meta Business Agent messages);
- Meta only changes prices on the first day of each quarter.
As an example, these are the Brazilian real (BRL) rates for recipients in Brazil, in effect since October 1, 2026:
| Category | Price per delivered message |
|---|---|
| Marketing | R$ 0.3217 |
| Utility | R$ 0.0350 |
| Authentication | R$ 0.0350 |
| Service (after 1,000 per number per month) | R$ 0.0350 |
Rates for other countries are in Meta’s rate cards on the same page. Since October 1, 2026, utility messages inside the service window are also charged, and accounts without a payment method stop getting service messages delivered once the free tier is used up. If you want to know what you can do without paying, see is there a free WhatsApp API?.
On top of that comes the cost of running the integration: your own team, if you integrate directly, or the provider you pick.
Direct integration or a provider
You can integrate directly with the Cloud API: create the app, generate the system user token, set up the webhook, add a payment method to the messaging account and run all of it in production. A provider takes part of that work off your plate; the criteria to pick one are in how to choose a WhatsApp API provider.
WhatsApp Cloud API with Vectalk
Vectalk is a proxy for the WhatsApp Cloud API: your application calls Vectalk, which forwards the call to Meta. Payloads are the same as Meta’s; only the base URL and the token change.
| Direct Cloud API | Vectalk | |
|---|---|---|
| Base URL | https://graph.facebook.com/vXX.X | https://apis.vectalk.com.br/api |
| Token | Meta system user token | Token generated in the Vectalk dashboard |
| Webhooks | Meta format, one endpoint per app | Meta format, several URLs per instance |
| Paying Meta | Payment method on the messaging account | You pay Vectalk, and Vectalk pays Meta |
Vectalk also supports coexistence: the number stays in the WhatsApp Business app and also works on the API. To get started, sign up at apps.vectalk.com.br/register and follow the quickstart (docs in Portuguese).
Frequently asked questions
Are the Cloud API and the WhatsApp Business API the same thing?
Today, yes. “WhatsApp Business API” was the umbrella name back when there were two versions. Since the On-Premises API was shut down on October 23, 2025, the Cloud API is the only official way to use the platform.
Do I need a server to use the Cloud API?
Not to host WhatsApp, which runs at Meta. You only need a public HTTPS endpoint to receive webhooks, which can be a serverless function or a regular server.
Is the WhatsApp Cloud API free?
There’s no monthly fee from Meta, but messages are charged on delivery, by category and country. There’s a free tier of 1,000 service messages per number per month and free windows for conversations that start from ads.
Which Graph API version should I use?
The latest one listed in Meta’s changelog. Each version has a deprecation date, so keep the version as configuration rather than hard-coding it.
Can I use the number that’s already on my phone?
If it’s on the WhatsApp Business app, yes, through coexistence. If it’s on regular WhatsApp, you need to delete the account from the app before registering the number.
Official sources checked on October 25, 2026: Cloud API overview, On-Premises API sunset, Get started, Throughput, Messaging limits, Phone numbers, Pricing, Vectalk documentation.
