What looks wrong?

We say this article was researched and checked. If it is wrong, we want the counter-example.

Skip to content
Petra Vlk

Nov 12, 202615 min read

As of 2026-11-12, a solo owner belongs on the free Business app, and every team that needs automation or shared inboxes, whether it wires up its own flows in a tool like Activepieces or not, belongs on the Cloud API, which bills per message.

A WhatsApp integration is a connection between your business's systems and WhatsApp that lets software send and receive messages on a verified business number, typically through Meta's official WhatsApp Business Platform (Cloud API) using approved message templates.

50 million users sit on the Business app and 5 million on the API, by SocialVik's count, so the split's lopsided. Most people reading API documentation are in the minority and are there because the app stopped being enough.

Packed grandstand beside a tiny table of people

Read the table for each route, what it costs monthly, and the catch that forces the move to the next row.

Which WhatsApp plan fits you

Situation Route Monthly cost The catch that pushes them up
Solo owner Free Business app Free No automation, and one person answering every chat
Small team sending alerts Cloud API Per message only Templates must be approved, and the 24-hour window limits free-form replies
Team using a BSP (business solution provider) Cloud API through a provider Per message, plus the provider's own charges The provider's fees stack on top of message costs
High-volume marketer Cloud API, marketing templates Scales with sends Per-message rates vary by country

Look at the catches, not the prices: they decide which row you are in.

One person, one phone and no integration: that is the solo owner. The free app costs nothing and needs no approval, and nothing runs without you.

The moment a second person needs to answer, or an order should trigger a message automatically, the app has nothing to offer.

When five people are sending order alerts or appointment reminders, you sit in the Cloud API row, with messages wired up through Activepieces, which counts 747 integrations in its open-source monorepo, about 60% community-built, and lets you generate a missing connector with AI and add it privately to your own instance instead of waiting on a vendor's release.

You pay per message, not per seat.

The catch is operational: an unapproved template or a reply outside the 24-hour window fails, and the code is rarely the cause.

At 25 people, several agents need to share conversations, and the business needs a verified identity. That's where a BSP earns its fee, because it supplies the inbox.

The catch is the second bill: the provider's charges arrive on top of what Meta charges per message.

WhatsApp pricing for high-volume marketing senders

When the send is marketing, per-message pricing hurts. Sendr puts the US at $0.004 to $0.025 per message, so costs scale linearly with volume. So 10,000 messages cost $40 to $250.

What a WhatsApp marketing message costs next to SMS

For the same send in India, the range is $0.004 to $0.0107, or $40 to $107, which means you can't know the exact cost of a send in advance.

Brazil runs $0.00917 to $0.0625, which is $91.70 to $625. The same campaign can cost up to about six times more in Brazil than in India, so budget per country, not per campaign.

This takes minutes, not a project: automate it in Activepieces free.

Integrating WhatsApp through Cloud API

Strip it down and a WhatsApp integration's a link between a business phone number and your software. It's made through Meta's WhatsApp Business Platform, so your systems can send messages to customers and receive their replies. Each stage below leaves something working.

At developers.facebook.com, choose Create App, pick the Business type and attach it to your business portfolio. From the app dashboard, add the WhatsApp product.

Meta creates a test WhatsApp Business Account and a test number. You now have an app ID and a sandbox, which is enough to call the API but not enough to message real customers.

Stage 2: Send the first test message

Open WhatsApp > API Setup. Copy the Phone number ID, add your own phone to the recipient list and confirm it with the code WhatsApp sends. Then run the sample request, which posts to the /messages endpoint with the hello_world template.

A printed API Setup sheet showing a Phone number ID, a recipient list with one phone added, and a sample request to the…

When a call that worked this morning returns an authentication error later, it is a stale token, not a bug in your code, because the token on this page is temporary.

Stage 3: Register your number and create a permanent token

In WhatsApp Manager, add your real number and verify it by SMS or voice call. It can't already be active on the WhatsApp app.

Then, in Business Settings > Users > System users, create a system user, assign it the app, and choose Generate token with the whatsapp_business_messaging and whatsapp_business_management permissions. This token doesn't lapse, so store it in a secrets manager rather than in source control.

Activepieces pricing page showing four plan tiers with prices ranging from free to enterprise

Stage 4: Create and submit a message template

In WhatsApp Manager, open Message templates and choose Create template. Set the category (utility, marketing or authentication), the language and a body with numbered variables such as {{1}}. Submit it for review.

Until the status reads Approved, WhatsApp rejects any send outside a customer-initiated conversation, and a carelessly chosen category is the usual cause of a bounced review.

Stage 5: Set up the webhook and receive replies

Under WhatsApp > Configuration, enter a public HTTPS callback URL and a verify token of your choosing. Your endpoint must answer Meta's verification request by returning the hub.challenge value it receives.

A Meta app box sends a card to a small server box with a callback URL tag; the server returns a card holding the…

Then subscribe to the messages field. Delivery statuses and customer replies will arrive as POST requests to that URL.

You will find most integration failures here, in the run log rather than in the send call.

In the workflow view below, a Google Calendar event triggering a Gmail send shows what to expect from any builder. It displays each step's input and output data, and a failed run marked with its ID and an Edit Run button.

Activepieces workflow builder showing a three-step automation connecting Google Calendar to Gmail with run details and…

Read the failing step's output before changing anything.

WhatsApp Cloud API limits and errors, with fixes

Seven causes account for most Cloud API failures. The first is the 24-hour window: a free-form message sent a day after the customer's last reply fails with error 131047.

The table below lists each cause with what triggers it, the code you'll see, and the fix.

When a send fails, find the row that matches before you touch the code.

Trigger Code Fix
Free-form message sent more than 24 hours after the customer's last reply 131047 Send an approved template, or wait for the customer to write first
Template rejected in review None; status shows as rejected Reword, fix the category, resubmit
Daily cap reached at 250, with 2,000 unlocked by verification None; sends are blocked at the cap Complete business verification, keep quality high
Too many requests too quickly 130429 Queue sends, back off, retry
Access token expired 190 Replace it with a system user token
No valid payment method 131042 Add one in the business account's billing settings
Callback URL unreachable or failing verification None; no events arrive Return 200 fast, check the verify token

Take the window first, since each row has a longer story.

WhatsApp 24-hour window and template messages

When a customer messages you, the window opens; 24 hours later it closes. Inside it, you can send anything. After it, only an approved template goes through, and error 131047 is the Cloud API telling you so.

Nothing warns you when a campaign is scheduled on a rejected template: it silently never leaves. Templates fail review for vague wording, wrong categories or broken variables, and a rejected one can't be sent at all.

WhatsApp messaging limits and quality rating

A 5,000-person announcement stalls after 250 sends, because Meta caps a new portfolio at 250 messages per 24 hours.

Business verification opens the first tier at 2,000 messages per 24 hours, enough for a small customer list but not a large one.

The second tier allows 10,000, and the third allows 100,000, so a large list needs a number that has already climbed.

Messaging limit tiers for a new WhatsApp number

Sending to people who didn't expect the message costs you the next tier, because Meta's quality rating, driven by blocks and reports, decides whether you move up.

WhatsApp token, permission and webhook errors

Error 190 usually means a temporary token has expired, often a day or so after you generated it for testing, and production quietly stops. A system user token avoids that.

Slow down and retry on error 130429, a throughput limit. Error 131042 means billing isn't set up. Webhook failures give no code at all: events simply don't arrive. Check the endpoint first, then the verify token.

With those causes ruled out, what remains is usually code.

You can follow the rest of this with the builder open. Start free, no card.

Connecting WhatsApp messages to other apps with Activepieces

When the code is sound and the messages still go nowhere useful, the missing integration is often the hand-off.

Activepieces, an MIT-licensed open-source automation tool that MoneyGram, Moneypenny, Alan and FundingSocieties run, receives each WhatsApp event and passes it to your CRM, sheet or helpdesk without custom glue code.

On the free plan, Activepieces gives you 1,000 credits a month, and a run costs 1 credit however many steps it has, so a hand-off with six steps costs the same as one with two.

Activepieces pricing page showing four subscription tiers with features and pricing.

When you need a workflow tool and when you do not

Count how many places a message has to land. One destination is a code problem.

Several destinations, or colleagues who must change the routing without a deploy, is a workflow problem, and Activepieces offers unlimited flows on every plan, including free, so the count never changes what you pay. These are the cases where Activepieces adds nothing:

  • Your own code sends the replies and nobody else needs to edit the logic.
  • You're sending one-off messages from Meta's own tool.
  • Your CRM already has a native WhatsApp integration.
  • A single webhook endpoint that you control covers everything you need.

If none of those describe you, a workflow tool earns its place, because it removes the glue you would otherwise maintain yourself.

For a team that doesn't want to run anything, Zapier and Make are hosted services that do the same job, and either will do. Activepieces differs in that its MIT-licensed core can be self-hosted, which matters if message content should stay on your own infrastructure.

If you write a custom webhook, you get the most control and the most upkeep: you own retries, logging and every API change in the destination apps.

Build a workflow that logs inbound messages and replies

Build it in this order, and test each step before adding the next:

  1. Create a trigger that receives inbound WhatsApp events, then register its URL as the callback in your Meta app and confirm Meta accepts it.
  2. Add a step that pulls the sender's number, the message text and the timestamp out of the payload.
  3. Write those fields to a row in your sheet, or to a new ticket or contact note in your helpdesk.
  4. Add a branch that checks whether the customer wrote recently enough for a free-form reply.
  5. On the open-window branch, send the reply through the WhatsApp connector with your phone number ID and token.
  6. On the closed-window branch, send your approved template instead.

At step four most hand-built flows fail, which is why it belongs in the workflow itself.

The platform rejects a reply that ignores the window, and the tool shows you the failed run rather than hiding it. Open that run first when a message goes missing.

The first-day checklist for a live WhatsApp integration

Before the first real customer message goes out, seven things must be true. Most failed launches trace back to a skipped item, not to the automation built on top.

Follow the order below on Monday morning. It puts everything that can silently block a send ahead of the send itself, so nothing fails in front of a customer.

  1. Confirm the number and display name are approved.
  2. Store the token in a secrets manager.
  3. Check that the webhook responds.
  4. Attach a payment method.
  5. Record opt-in.
  6. Make a small first send.
  7. Recheck Meta's pricing and policy pages.

Taken in the order you'll meet them, each item maps to a stage of the build.

Create an app in Meta's developer dashboard and add the WhatsApp product to it. This gives you a test number and the business account that'll own everything later.

Create it under the company's verified business, not a personal login, or you'll be migrating ownership after launch.

Send one message from the dashboard to your own phone. The purpose is to prove the request format works, not to test your workflow.

The test number only reaches recipients you have listed in advance, so unexplained silence usually means the recipient was never added.

Register the real number and wait for the display name to be approved. Checking this is item one on Monday's list, not something to assume.

Then replace the temporary token with a permanent one and keep it in a secrets manager. That's a vault that hands credentials to your code at run time instead of leaving them in a file.

A token pasted into a workflow is one export away from leaking.

For any message you start outside a customer's reply window, Meta requires a template: pre-approved wording. Rejections tend to come from vague text or variables with no sample values, so write it plainly and expect to resubmit once.

A token pasted into a workflow is one export away from leaking.

Record opt-in at the same time: who agreed, when, and to what.

The webhook is the public HTTPS address Meta calls when a customer replies or a message status changes. Confirm it answers Meta's verification request, then send a small first message to a few known people.

Attach the payment method before that send, and reread Meta's pricing page afterward, because your cost model is only as current as your last read.

Frequently asked questions

Can I use my existing WhatsApp Business app number with the Cloud API?

Yes, but you can't simply point the API at it. Either you remove the number from the app and register it to the API, or you use Meta's coexistence onboarding, which lets the app and the API share one number where it's offered.

Check eligibility for your country and account before you promise anyone that the shared inbox will keep working. The migration path decides whether your team keeps its chat history and its phone.

Do I need a business solution provider to integrate WhatsApp?

No. You can connect to the Cloud API directly with your own verified business account, number and approved template. A provider earns its fee by handling onboarding, a ready-made inbox and support, and it usually adds its own markup on top of Meta's charges.

If you have one developer and a single use case, going direct is the shorter path. If you need an agent inbox this week, a provider may be cheaper than building one.

Can I message customers who have not messaged me first?

Yes, but only with an approved template, and only to people who have opted in to hear from you. Free-form text works only while a customer's last message to you is recent enough to keep the conversation window open.

Once the window closes, a plain-text send is rejected, and that rejection is the most common reason an integration that passed testing fails in production. Templates are billed, which is why the payment method has to be attached before the first send.

How long does WhatsApp template approval take?

Often quickly, but Meta publishes no guarantee, so don't build a launch date on it. The status shows in your template manager, and a rejection comes with a reason.

When a rejection comes, it most often traces to the template itself. The usual faults are variables with no sample values, wording that reads as promotional under a utility category, or placeholders stacked so tightly that the message makes no sense.

Submit the real wording early, and keep a second version ready in case the first is sent back.

Is there a free way to test a WhatsApp integration?

Yes. The developer dashboard provides a test number you can use to send messages to a short list of recipients you have verified. Use it to prove your webhook, your payload format and your handling of delivery statuses.

Because your real number's approval state, template categories and sending limits aren't in play yet, the test number doesn't prove production behavior.

Treat a passing test as proof that the code works, and a first send from the real number as proof that the account does.

References

Share

Build it

Set this up in minutes.

No code required. Connect your accounts, and Activepieces runs it from there.

Start free Talk to sales