WhatsApp Meta Cloud API setup — complete guide
The official Meta WhatsApp Business Cloud API is the cheapest way to send WhatsApp at scale — no BSP markup, direct Meta billing, unlimited capacity. This guide is written for first-timers. Every screen, every button, every pitfall. ~25 minutes end-to-end.
- A Facebook account (personal, used as admin). Create one if needed.
- A business email (ideally domain-based, not Gmail — speeds up verification).
- A dedicated phone number for WhatsApp that's NOT currently on the WhatsApp consumer app. If it is, uninstall WhatsApp from that SIM first and wait 24 hours.
- Your business legal name + GST/incorporation document (for verification later).
- A real website URL (even a one-page store is fine) — required for Live mode approval.
- A published Privacy Policy page. Shopify generates one automatically at
yourstore.com/policies/privacy-policy.
1. Create a Meta Business Portfolio
A Business Portfolio (formerly "Business Manager") is the container that owns your WhatsApp Business Account, your Meta App, and your phone number. It's the top-level entity Meta uses for billing and verification.
- Go to business.facebook.com.
- Click Create Account. Enter your business legal name, your name, and work email. Use a domain email (
hello@yourbrand.com) — Meta prioritizes these. - Inside Business Settings, go to Business Info and fill in: legal business name (must match GST / Certificate of Incorporation exactly), address, phone, website URL.
- Go to People → Add and add yourself as an admin (if you aren't already).
2. Start Business Verification (optional but start early)
Verification is optional to start sending, but required for: higher messaging limits, marketing templates at scale, and the green-tick badge. It takes 1-5 business days, so kick it off now and continue with setup.
- Business Settings → Security Center → Start verification.
- Upload: Certificate of Incorporation / GST certificate, a recent utility bill showing the business address, and (optional) your business bank statement header.
- Verify domain ownership: add a DNS TXT record Meta gives you, or upload an HTML file to your root domain. Shopify: Settings → Domains → DNS settings → Add TXT record. This step is the fastest path to verification.
- Provide a callable business phone number. Meta may call to confirm.
3. Create a Meta App in the Developer Console
The Meta App is the technical bridge between your Business Portfolio and the Cloud API endpoints. Think of it as the API client that owns your permissions.
- Go to developers.facebook.com/apps and log in with the same Facebook account that admins your Business Portfolio.
- Click Create App.
- Use-case: pick Other → click Next.
- App type: pick Business → Next.
- App name: something like "Acme WhatsApp Sender". Contact email: your business email.
- Business Portfolio: select the Portfolio you created in Step 1. Critical — if you skip this, your app won't be able to own a WABA later.
- Click Create App. Enter your Facebook password to confirm.
4. Add WhatsApp product to the app
- On your new app's dashboard, scroll to Add products to your app.
- Find WhatsApp → click Set up.
- Meta creates a scratchpad WABA with a test phone number for you. You'll replace this with your real number in Step 7.
- You're now on the WhatsApp → API Setup page. Leave this tab open — you'll come back to it.
5. Switch the app from Development to Live modeThe #1 mistake new users make.
To flip the app to Live:
- In the Meta app dashboard, find the toggle in the top bar that says App Mode: Development. Click it.
- You'll be prompted to complete App setup requirements. Typically two blockers:
- Privacy Policy URL — paste
https://yourstore.com/policies/privacy-policy(Shopify auto-generates this). Must be a live public URL. - App Icon — upload a 1024×1024 PNG of your logo.
- Category — pick "Business and Pages".
- Business Use (if asked) — select "Support my own business."
- Privacy Policy URL — paste
- Hit Save. The toggle now flips to Live.
6. Create a WhatsApp Business Account (WABA)
A WABA is the billing and compliance entity that owns your phone number, templates, and quality ratings. One Business Portfolio can own multiple WABAs (e.g. one per brand).
- Go to Business Settings → Accounts → WhatsApp Accounts → Add → Create a new WhatsApp account.
- Name it (this is internal, not customer-facing — e.g. "Acme WA").
- Assign your Meta App (the one you created in Step 3) to this WABA. Critical — without this link, API calls won't resolve.
- Assign people: add yourself as Admin.
7. Add and verify your phone number
- Go to your Meta App → WhatsApp → API Setup → Add phone number.
- Business display name: the name customers will see (e.g. "Acme Store"). 2-30 characters. Cannot be a personal name unless you're a solo founder, cannot exactly match the phone number format.
- Category: pick the closest match (Retail, Apparel, Food & Beverage, etc.).
- Phone number: full E.164 format (
+91XXXXXXXXXX). Same format Meta expects for recipients too. - Verification method: SMS or Voice call. Pick Voice if the number is a landline or IVR.
- Enter the 6-digit OTP Meta sends. Verified.
8. Set the 6-digit 2-Factor Authentication PIN
Meta prompts you for a 6-digit PIN during number verification. This PIN protects the number from being stolen and re-registered elsewhere.
- When prompted, enter any 6 digits you'll remember.
- Write it down. Store it in a password manager (1Password, Bitwarden, etc.). You will need this PIN again if you later migrate the number, change WABAs, or re-verify.
9. Business display name and profile
- After number verification, your display name enters a review queue. Most names approve in 1-24 hours.
- Upload a profile picture (square, ≥ 640×640) in API Setup → Profile. This is the avatar customers see.
- Fill in the About field (bio text, up to 139 chars).
- Set the Address, Description, Email, Website — these appear in the business info panel in WhatsApp.
10. Find your WABA ID and Phone Number ID
You need two IDs to configure Alintro:
- WABA ID: Business Settings → Accounts → WhatsApp Accounts → click your WABA → copy the number next to the name (looks like
1048192734827361). - Phone Number ID: in your Meta App → WhatsApp → API Setup page, find the "From" dropdown — the Phone Number ID is shown under your verified number (looks like
398273401827365). NOT the same as your phone number itself.
11. Generate a permanent access token via System User
The token shown on the API Setup page is a temporary 24-hour token. For production you need a permanent token bound to a System User — it doesn't expire even if you log out or rotate passwords.
11a. Create the System User
- Business Settings → Users → System Users → Add.
- Name:
alintro-sender(or any label). - Role: Admin. (Employee role does not work for WhatsApp.)
- Click Create System User.
11b. Assign assets to the System User
- Click the new System User → Add Assets.
- Asset type: Apps. Select your Meta App. Toggle Manage app ON. Save.
- Click Add Assets again. Asset type: WhatsApp Accounts. Select your WABA. Toggle Full Control (both View and Manage). Save.
#200 Permission denied. This is the second most common pitfall.11c. Generate the token
- On the System User page → Generate New Token.
- App: select your Meta App.
- Token expiration: Never. (Default is 60 days — change it.)
- Permissions — tick exactly these two:
whatsapp_business_messaging— send messageswhatsapp_business_management— manage templates, phone numbers, profile
- Click Generate Token. Copy it immediately — Meta shows it only once. Paste into your password manager.
12. Paste credentials into Alintro
- Open your Shopify store → Apps → Alintro (or install from the App Store if you haven't).
- Navigate to Gateways → Add Gateway → WhatsApp Meta Cloud API.
- Paste:
- WABA ID (from Step 10)
- Phone Number ID (from Step 10)
- Permanent Access Token (from Step 11c)
- Click Test connection. Alintro sends a test template to your admin phone. On success you'll see "Test message sent." On failure, the full Meta API error is shown — cross-reference with the error table below.
13. Register message templates
WhatsApp requires every business-initiated message to be a pre-approved template. Only within a 24-hour window after a customer messages you can you send free-form text.
13a. Template categories — pick the right one
| Category | Use for | India price | Approval |
|---|---|---|---|
| Utility | Order confirm, shipping update, delivered, cancelled, OTP-as-receipt | ₹0.16 | ~5 min |
| Authentication | OTPs, login codes, COD verification | ₹0.13 | ~5 min |
| Marketing | Sales, offers, promos, win-back, back-in-stock | ₹0.82 | 1-24 hours |
13b. Submit a template
- In Alintro → Templates → New Template. Or in Meta: Business Settings → WhatsApp Accounts → Message Templates → Create Template.
- Pick Category (Utility / Marketing / Authentication).
- Pick Language (
en,en_US,hi, etc.). You can have the same template in multiple languages. - Header (optional): Text, Image, Video, or Document. Max 60 chars for text header.
- Body: up to 1,024 chars. Use
{{1}},{{2}}for variables. Alintro auto-maps these to your Shopify placeholders. - Footer (optional): up to 60 chars.
- Buttons (optional): Call-to-Action (URL / phone) or Quick Reply.
- Sample values: Meta requires realistic sample text for each variable. Use real-looking values — "Ramesh Kumar" for a name, "#1042" for an order number. "Test" or "xxx" will get you rejected.
- Submit. Utility/Auth usually approve in minutes.
13c. Common rejection reasons
- Using a URL shortener (
bit.ly,tinyurl) — Meta demands the real destination domain. - Marketing content in a Utility category template.
- All-caps promotional words ("BUY NOW!!!").
- Missing opt-in language for marketing templates ("Reply STOP to unsubscribe").
- Unrealistic sample values in the variables.
- Asking for sensitive data (credit card, full SSN, password).
14. (Optional) Subscribe to delivery status webhooks
If you want Alintro to update the message status (sent → delivered → read → failed) in real time, enable Meta webhooks.
- Alintro auto-generates a webhook callback URL and verify token when you save the gateway. Copy them from Gateways → WhatsApp Meta → Webhook.
- In Meta App → WhatsApp → Configuration → Webhook → Edit.
- Paste the Callback URL and Verify Token. Click Verify and Save.
- Subscribe to the
messagesfield. This includesstatusupdates.
15. Send your first real message
- In your Shopify store, place a test order (draft order or a ₹1 product).
- Within a few seconds, the admin phone should receive the Order Confirmation template on WhatsApp.
- Go to Alintro → Message History and verify status =
delivered.
Common errors + exact fixes
If Alintro shows a Meta error code, find it here:
| Code | What it means | Fix |
|---|---|---|
| #131051 | Unsupported message type | Check message body JSON matches Cloud API schema. Usually caused by a bad interactive/list message structure. |
| #131026 | Message not sent | Recipient is outside the 24h customer service window. Send a pre-approved template instead of a free-form message. |
| #132000 | Template parameter mismatch | The number of variables you passed doesn't match the template. If the template has {{1}} and {{2}}, send exactly two parameters. |
| #132001 | Template does not exist | The template name is wrong, in a different language, or not yet approved. Check Alintro → Templates → status. |
| #131053 | Media file size too large | Images < 5MB, video < 16MB, audio < 16MB, document < 100MB. Compress before sending. |
| #100 | Invalid parameter | Usually wrong Phone Number ID, malformed E.164 recipient number, or a permission scope missing on your token. |
| #368 | Temporarily blocked due to spam | Number quality dropped to Low. Pause 1-24 hours. Fix: clean opt-in list, remove low-performing templates, reduce marketing volume. |
| #470 | Re-engagement window expired | You're trying to send a free-form message > 24h after the customer's last message. Use a template instead. |
| #133010 | Phone not registered | Your WhatsApp number is not registered on Cloud API, or you're using the wrong Phone Number ID. |
| #190 | Token expired | Your access token is a temporary 24h one. Generate a permanent System User token (see Step 11). |
| #200 | Permission error | Token is missing whatsapp_business_messaging scope. Regenerate the System User token with both whatsapp_business_messaging AND whatsapp_business_management. |
| App in dev mode | Message silently ignored for non-testers | App is in Development mode. Only phone numbers added as Recipients can receive. Switch app to Live mode (Step 5). |
Pre-launch checklist
Before you turn on real-customer notifications, verify:
- App mode badge reads "Live" (not Development).
- Privacy Policy URL is live and reachable.
- Phone number verified and display name approved.
- 2FA PIN is stored in a password manager.
- System User has both whatsapp_business_messaging and whatsapp_business_management scopes.
- System User is assigned the WABA (not just the App).
- Permanent token expiration is set to Never.
- At least one template is in "Approved" status.
- Test order from Shopify successfully delivers a WhatsApp message to admin phone.
- Quality Rating on your number is High (green).
- Profile picture, business description, and website are filled in.
FAQ
My app is in Development mode — can I send messages to customers?+
No. In Development mode, the app can only send messages to phone numbers added as testers (Recipients) in API Setup. You MUST switch the app to Live mode before any real customer can receive messages. See Step 5 in this guide.
How much does WhatsApp Cloud API cost?+
Meta charges per conversation, not per message. India utility ~₹0.16, US utility $0.014, authentication ~₹0.13, marketing varies by country. The first 1,000 service conversations each month are free. See developers.facebook.com/docs/whatsapp/pricing for the live rate card.
Do I need Facebook Business Verification?+
Not to start. Unverified accounts can send to 250 business-initiated conversations per day and up to 50 unique customers in the first 24 hours. Verification is required to raise this and to send marketing templates at scale. Takes 1-5 business days.
Can I use my regular WhatsApp number?+
No. Once a number is registered with Cloud API, it becomes API-only — you cannot use it on the WhatsApp consumer app anymore. Use a new or dedicated business number. If you want to migrate an existing business number, delete the WhatsApp account from the phone first and wait 24 hours before registering.
How long does template approval take?+
Utility and Authentication templates are typically approved in under 5 minutes. Marketing templates can take up to 24 hours. Rejections are almost always for wrong category, promotional wording in utility, missing opt-in language, or URL issues.
Why should I use Cloud API over a BSP like WATI or AiSensy?+
Cost. BSPs add a 10-30% markup per conversation plus a monthly platform fee (₹1,500-₹4,000/month). Cloud API is direct from Meta with no markup. BSPs are worth it only if you need their team inbox UI or bot builder. Alintro lets you send via Cloud API and use any inbox tool for replies.
I lost my 2-Factor Authentication PIN. What now?+
Meta locks the number for 7 days. After 7 days, you can verify the number again. Always store the 6-digit 2FA PIN in a password manager during setup.
What happens if I violate WhatsApp policy?+
Meta tracks Quality Rating: High (green) → Medium (yellow) → Low (red). High block rates or spam reports drop quality. Low quality auto-pauses sending for 1 hour, and repeated Low ratings can ban the number permanently. Send only to opted-in users; keep templates compliant.
Why did my template get auto-reclassified from Utility to Marketing?+
Meta uses an auto-categorizer that overrides your selected category if the content looks promotional. Pure order updates stay Utility. Mention of discounts, offers, sales, or emojis like 🎉 can trigger reclassification — which quadruples the per-message cost. Write templates factually.
Ready to send?
Install Alintro on your Shopify store and wire up Meta Cloud API using this guide in ~25 minutes.