WhatsApp API Send Message: How to Send WhatsApp Messages, Templates, and Bulk Campaigns
One POST sends a WhatsApp message. What decides whether it actually arrives is the 24-hour window, your template approval, and your messaging tier. Build the request on the right, then send at volume without writing the batching layer yourself.
Endpoint and payloads below match Meta's current Cloud API documentation, which shows Graph API v25.0.
Example request only. Never paste a real access token into a browser tool.
The short answer
To send a message with the WhatsApp API you POST a JSON body to https://graph.facebook.com/v25.0/PHONE_NUMBER_ID/messages with an Authorization: Bearer header. The body sets messaging_product to whatsapp, names the recipient in international format with no plus sign, and picks a message type.
The call itself is the easy part. Whether the message is allowed depends on timing: if the customer messaged you within the last 24 hours you can send free-form text, and outside that window you can only send a template Meta has already approved. How many people you can reach in a day is capped by your messaging tier, not by the API.
Default Cloud API throughput, roughly 288,000 messages an hour
The customer service window that decides if free-form text is allowed
Unique recipients per 24 hours on a brand new number, before tier upgrades
What Meta charges for API calls. You pay per delivered template instead
Two ways to send: raw Cloud API or a sending platform
Both routes use the same official Meta infrastructure and the same per-message rates. The difference is how much of the surrounding machinery you build yourself.
| What you need | Coding against the Cloud API | Sending through WaBulkSend |
|---|---|---|
| Send one message | One POST, works immediately | One click or one API call |
| Send to 20,000 contacts | You build queueing, retries, and rate limiting | Upload the list, pick a template, send |
| Template management | Submit and version templates through the Graph API | Template editor with approval status shown |
| Delivery tracking | Register webhooks, store message IDs, match them yourself | Per-recipient delivery and read status in the dashboard |
| Handling replies | Build an inbox, or drop the replies | Shared team inbox included |
| Meta per-message fee | Same rates, billed by Meta | Same rates, no per-message platform markup |
If you only ever send a handful of transactional messages from your own backend, the raw API is fine. The build cost shows up when you need volume, retries, and a place for replies to land.
How to send a WhatsApp message with the API in 5 steps
Register a number
Create a Meta developer app, add the WhatsApp product, and connect a WhatsApp Business Account. Registering a number to the platform permanently removes it from the consumer and Business apps, so use a number you are willing to move.
Get the two credentials
You need the phone number ID, which is a numeric identifier and not your actual phone number, plus an access token. The dashboard token expires in about 24 hours, so create a System User token in Meta Business Suite before you go live.
Get a template approved
Submit a utility or authentication template and wait for review. Without an approved template you can only reply to people who messaged you first, which rules out any outbound campaign.
POST to the messages endpoint
Send the request built at the top of this page. Pin the API version in the URL rather than leaving it floating, because Meta ships breaking changes between versions and retires old ones on a schedule.
Subscribe to webhooks
A 200 response means Meta accepted the message, not that it arrived. Register webhooks for sent, delivered, read, and failed events, and store the returned message ID so you can match each status back to the send.
Skip steps 4 and 5
WaBulkSend runs the queueing, retries, rate limiting, and delivery tracking on the same official platform, so you upload a list and send instead of building a sending layer.
Start freeWhat you can send through the WhatsApp API
The type field in the payload decides the message format. Each type takes its own content object.
| Type | What it sends | Needs an open 24-hour window? |
|---|---|---|
| template | Pre-approved message, with or without media and buttons | No, this is the only way to start a conversation |
| text | Plain text, with optional link preview | Yes |
| image, video, audio, document, sticker | Media by uploaded ID or hosted URL | Yes |
| interactive | Reply buttons, list menus, call-to-action URL buttons, Flows | Yes |
| location, contacts, address | Map pin, contact card, or address request | Yes |
| reaction | An emoji reaction on a message you received | Yes |
New in 2026: the API can now send to groups
Most guides on the web still say the WhatsApp Business Platform cannot message a group. That is now out of date. Meta's current documentation covers a Groups API: you set recipient_type to group and put a group ID in the to field, and text, media, and text or media based templates are supported. Delivery and read webhooks arrive aggregated across the group rather than one per member, and group management runs off its own webhook fields. Meta does not publish a group size cap or separate group pricing in that documentation, so treat both as unconfirmed until it does.
Sending in bulk: what actually limits you
There is no bulk endpoint. Bulk sending on WhatsApp means one POST per recipient, looped, inside three separate ceilings.
Throughput
The Cloud API handles up to 80 messages per second by default. A separate brake limits you to one message every 6 seconds to the same user, which is what catches naive retry loops.
Messaging tier
Your number starts at 250 unique recipients per rolling 24 hours, then climbs through 2,000, 10,000, 100,000, and unlimited as your quality rating stays healthy. There is no 1,000 tier.
Template approval
Every outbound campaign message needs an approved template in the right category. A rejected edit to a live template can stop a campaign, so keep a known-good version in your repo.
The US rule that surprises most teams
Meta paused delivery of marketing-category templates to US phone numbers on April 1, 2025, and that pause is still in effect. Sending one returns error 131049 and it never arrives. For US recipients your outbound options are utility and authentication templates, replies inside an open 24-hour window, and the 72-hour free entry point that click-to-WhatsApp ads open. Read the detail on sending WhatsApp marketing messages in the US.
What does it cost to send a message with the API?
Meta charges nothing for API access or for the requests themselves. You are billed per delivered template message, priced by category and by the recipient's country. A delivered US utility template sent through Twilio costs $0.0084 all in, combining Twilio's $0.005 per message fee with Meta's $0.0034 utility pass-through, which works out to $8.40 per thousand.
Two billing changes land shortly. From August 1, 2026 Meta bills its own Business Agent by AI token rather than per message. From October 1, 2026 service messages, meaning any non-template reply you send inside an open 24-hour window, become chargeable with no volume tier. Both are covered on the WhatsApp pricing changes hub, and you can model your own volume with the WhatsApp pricing calculator.
What the API will not do
Message anyone who has not opted in
The API will happily accept the request, but messaging people who never agreed to hear from you drives blocks, drops your quality rating, and shrinks your daily limit. Consent rules are covered on the WhatsApp opt-in page.
Import your existing chat history
Moving a number onto the platform starts it empty. Past conversations from the consumer or Business app do not transfer, and the number leaves those apps permanently once registered.
Run on an unofficial WhatsApp Web tool
Browser extensions that puppet WhatsApp Web are not an API. WhatsApp's terms prohibit unauthorized automated or bulk messaging, and numbers using them get banned. The official platform is the one authorized route.
Guarantee delivery from a 200 response
A success response means Meta queued the message. Whether it reached the handset comes back later on the status webhook, which is why storing message IDs matters. See why WhatsApp messages are not delivered.
Frequently asked questions
How do I send a message using the WhatsApp API?
POST to the messages endpoint for your phone number ID with a Bearer access token and a JSON body. Set messaging_product to whatsapp, put the recipient number in international format with no plus sign or spaces, choose a type, and pass that type's content object. A US number looks like 15551234567.
Can I send bulk messages with the WhatsApp API?
Yes, by looping an approved template across your contact list, one request per recipient. There is no batch endpoint. Your ceiling is the messaging tier on your number, which starts at 250 unique recipients per 24 hours and rises to unlimited as your quality rating holds up.
Is the WhatsApp API free to send messages?
API access and the requests are free, and Meta hosts the Cloud API at no charge. You pay per delivered template message, set by category and the recipient's country. Replies you send inside an open 24-hour window are free today, but become chargeable on October 1, 2026.
Do I need a template to send a WhatsApp message?
Only when no 24-hour window is open. If the customer messaged you in the last 24 hours you can send free-form text, media, and interactive messages. To start a conversation, or after the window closes, you must use a template Meta has approved for a specific category.
Can the WhatsApp API send a message to a group?
Yes. Meta's current documentation describes a Groups API where you set recipient_type to group and pass a group ID instead of a phone number. Text, media, and text or media based templates are supported. This is a recent addition, so most third-party guides still incorrectly say group sending is impossible.
Does the recipient need to save my number first?
No. That requirement belongs to broadcast lists in the consumer and Business apps, where a message is silently dropped if the recipient has not saved you. The official platform has no saved-contact rule and reports delivery per recipient, which is the main reason businesses move off broadcast lists.
How many messages can the WhatsApp API send per second?
Meta documents up to 80 messages per second by default on the Cloud API, which is about 288,000 an hour. A separate per-user limit allows one message every 6 seconds to the same recipient. Your daily unique-recipient tier usually binds long before throughput does.
Which API version should I use?
Pin an explicit version in the URL rather than relying on a default. Meta's current documentation shows v25.0. Versions are retired on a published schedule, so treat the version string as a dependency you review, not something you set once and forget.
Send WhatsApp messages without building the sending layer
Same official platform, same Meta rates, none of the queueing, retry, and webhook plumbing. Upload a list, pick an approved template, and watch delivery per recipient.
Start freeKeep reading
How to send WhatsApp messages with the API
The developer walkthrough, from tokens to webhooks.
WhatsApp Cloud API
What Meta hosts, how access works, and what it replaced.
WhatsApp bulk sender
Send approved templates to a whole list with delivery tracking.
WhatsApp Business API messaging limits
Every tier, how you move up, and what resets the clock.
WhatsApp message templates
Categories, variables, and getting approved the first time.
WhatsApp API error codes
What each failure code means and how to clear it.