All docs
WhatsApp Setup

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.

What you'll end up with: a Meta Business Portfolio, a Meta App in Live mode, a WhatsApp Business Account (WABA), a verified phone number, a permanent access token, one approved template, and Alintro wired to send via Meta Cloud API directly.
Before you begin — you'll need:
  • 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.

  1. Go to business.facebook.com.
  2. Click Create Account. Enter your business legal name, your name, and work email. Use a domain email (hello@yourbrand.com) — Meta prioritizes these.
  3. Inside Business Settings, go to Business Info and fill in: legal business name (must match GST / Certificate of Incorporation exactly), address, phone, website URL.
  4. Go to People → Add and add yourself as an admin (if you aren't already).
If you already run Facebook Ads through a Business Portfolio, use that one — do not create a second. WhatsApp can be added to your existing Portfolio.

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.

  1. Business Settings → Security CenterStart verification.
  2. Upload: Certificate of Incorporation / GST certificate, a recent utility bill showing the business address, and (optional) your business bank statement header.
  3. 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.
  4. Provide a callable business phone number. Meta may call to confirm.
You can send WhatsApp messages while verification is pending — you just won't get Tier 2+ limits or send marketing at scale until it clears.

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.

  1. Go to developers.facebook.com/apps and log in with the same Facebook account that admins your Business Portfolio.
  2. Click Create App.
  3. Use-case: pick Other → click Next.
  4. App type: pick Business → Next.
  5. App name: something like "Acme WhatsApp Sender". Contact email: your business email.
  6. 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.
  7. Click Create App. Enter your Facebook password to confirm.

4. Add WhatsApp product to the app

  1. On your new app's dashboard, scroll to Add products to your app.
  2. Find WhatsApp → click Set up.
  3. Meta creates a scratchpad WABA with a test phone number for you. You'll replace this with your real number in Step 7.
  4. You're now on the WhatsApp → API Setup page. Leave this tab open — you'll come back to it.
The test number can send to 5 recipient numbers you add manually — great for testing, never for production.

5. Switch the app from Development to Live modeThe #1 mistake new users make.

Read this carefully. A newly created Meta app is in Development mode by default. In Development mode, the app can only send WhatsApp messages to phone numbers you've explicitly added as "Recipients" on the API Setup page. Every real customer number is silently dropped. The message request returns HTTP 200 success, but the recipient never gets it. This is why 8 out of 10 first-time users say "the API works in tests but doesn't send to my customers."

To flip the app to Live:

  1. In the Meta app dashboard, find the toggle in the top bar that says App Mode: Development. Click it.
  2. 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."
  3. Hit Save. The toggle now flips to Live.
Double-check: at the top of your app dashboard, the badge must say Live, not Development. If it still says Development, nothing reaches real customers.
Note on App Review: for WhatsApp specifically, you do NOT need to go through Meta's App Review / Advanced Access process to send to real customers. WhatsApp Business API is granted automatically once the app is Live and the WABA is attached. (This is different from Facebook Login or Ads APIs.)

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).

  1. Go to Business Settings → Accounts → WhatsApp Accounts → Add → Create a new WhatsApp account.
  2. Name it (this is internal, not customer-facing — e.g. "Acme WA").
  3. Assign your Meta App (the one you created in Step 3) to this WABA. Critical — without this link, API calls won't resolve.
  4. Assign people: add yourself as Admin.
If Meta auto-created a scratchpad WABA in Step 4, you can use that one instead of creating a new one. Look under Business Settings → WhatsApp Accounts; if one already exists, proceed to Step 7.

7. Add and verify your phone number

One-way door. Once a phone number is registered on Cloud API, it CANNOT be used on the WhatsApp consumer or WhatsApp Business Android app ever again. Use a dedicated business SIM.
  1. Go to your Meta App → WhatsApp → API SetupAdd phone number.
  2. 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.
  3. Category: pick the closest match (Retail, Apparel, Food & Beverage, etc.).
  4. Phone number: full E.164 format (+91XXXXXXXXXX). Same format Meta expects for recipients too.
  5. Verification method: SMS or Voice call. Pick Voice if the number is a landline or IVR.
  6. Enter the 6-digit OTP Meta sends. Verified.
If verification fails with "already in use": the number is still registered to the WhatsApp consumer app. Open WhatsApp on that phone → Settings → Account → Delete my account. Wait 24 hours, then retry.

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.

  1. When prompted, enter any 6 digits you'll remember.
  2. 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.
If you lose this PIN, Meta locks the number for 7 days. You cannot send WhatsApp messages during the lockout. There is no support recovery — the 7-day timer is the only reset.

9. Business display name and profile

  1. After number verification, your display name enters a review queue. Most names approve in 1-24 hours.
  2. Upload a profile picture (square, ≥ 640×640) in API Setup → Profile. This is the avatar customers see.
  3. Fill in the About field (bio text, up to 139 chars).
  4. Set the Address, Description, Email, Website — these appear in the business info panel in WhatsApp.
If your display name is rejected: avoid trademark words (e.g. "Amazon"), avoid "official", avoid "WhatsApp" or "Meta" inside the name, and make sure it doesn't imitate another business.

10. Find your WABA ID and Phone Number ID

You need two IDs to configure Alintro:

  1. WABA ID: Business Settings → Accounts → WhatsApp Accounts → click your WABA → copy the number next to the name (looks like 1048192734827361).
  2. 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

  1. Business Settings → Users → System Users → Add.
  2. Name: alintro-sender (or any label).
  3. Role: Admin. (Employee role does not work for WhatsApp.)
  4. Click Create System User.

11b. Assign assets to the System User

  1. Click the new System User → Add Assets.
  2. Asset type: Apps. Select your Meta App. Toggle Manage app ON. Save.
  3. Click Add Assets again. Asset type: WhatsApp Accounts. Select your WABA. Toggle Full Control (both View and Manage). Save.
If you skip assigning the WABA, the token generates successfully but every API call returns #200 Permission denied. This is the second most common pitfall.

11c. Generate the token

  1. On the System User page → Generate New Token.
  2. App: select your Meta App.
  3. Token expiration: Never. (Default is 60 days — change it.)
  4. Permissions — tick exactly these two:
    • whatsapp_business_messaging — send messages
    • whatsapp_business_management — manage templates, phone numbers, profile
  5. Click Generate Token. Copy it immediately — Meta shows it only once. Paste into your password manager.

12. Paste credentials into Alintro

  1. Open your Shopify store → Apps → Alintro (or install from the App Store if you haven't).
  2. Navigate to Gateways → Add Gateway → WhatsApp Meta Cloud API.
  3. Paste:
    • WABA ID (from Step 10)
    • Phone Number ID (from Step 10)
    • Permanent Access Token (from Step 11c)
  4. 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

CategoryUse forIndia priceApproval
UtilityOrder confirm, shipping update, delivered, cancelled, OTP-as-receipt₹0.16~5 min
AuthenticationOTPs, login codes, COD verification₹0.13~5 min
MarketingSales, offers, promos, win-back, back-in-stock₹0.821-24 hours
Meta auto-re-categorizes. If you submit a utility template but it contains words like "offer," "discount," "sale," or celebratory emojis, Meta's auto-categorizer silently bumps it to Marketing — quintupling your cost. Keep utility templates strictly factual.

13b. Submit a template

  1. In Alintro → Templates → New Template. Or in Meta: Business Settings → WhatsApp Accounts → Message Templates → Create Template.
  2. Pick Category (Utility / Marketing / Authentication).
  3. Pick Language (en, en_US, hi, etc.). You can have the same template in multiple languages.
  4. Header (optional): Text, Image, Video, or Document. Max 60 chars for text header.
  5. Body: up to 1,024 chars. Use {{1}}, {{2}} for variables. Alintro auto-maps these to your Shopify placeholders.
  6. Footer (optional): up to 60 chars.
  7. Buttons (optional): Call-to-Action (URL / phone) or Quick Reply.
  8. 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.
  9. 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.

  1. Alintro auto-generates a webhook callback URL and verify token when you save the gateway. Copy them from Gateways → WhatsApp Meta → Webhook.
  2. In Meta App → WhatsApp → Configuration → Webhook → Edit.
  3. Paste the Callback URL and Verify Token. Click Verify and Save.
  4. Subscribe to the messages field. This includes status updates.

15. Send your first real message

  1. In your Shopify store, place a test order (draft order or a ₹1 product).
  2. Within a few seconds, the admin phone should receive the Order Confirmation template on WhatsApp.
  3. Go to Alintro → Message History and verify status = delivered.
Once you confirm delivery, flip on the other templates (shipping update, delivered, abandoned cart) in Alintro → Notifications.

Common errors + exact fixes

If Alintro shows a Meta error code, find it here:

CodeWhat it meansFix
#131051Unsupported message typeCheck message body JSON matches Cloud API schema. Usually caused by a bad interactive/list message structure.
#131026Message not sentRecipient is outside the 24h customer service window. Send a pre-approved template instead of a free-form message.
#132000Template parameter mismatchThe number of variables you passed doesn't match the template. If the template has {{1}} and {{2}}, send exactly two parameters.
#132001Template does not existThe template name is wrong, in a different language, or not yet approved. Check Alintro → Templates → status.
#131053Media file size too largeImages < 5MB, video < 16MB, audio < 16MB, document < 100MB. Compress before sending.
#100Invalid parameterUsually wrong Phone Number ID, malformed E.164 recipient number, or a permission scope missing on your token.
#368Temporarily blocked due to spamNumber quality dropped to Low. Pause 1-24 hours. Fix: clean opt-in list, remove low-performing templates, reduce marketing volume.
#470Re-engagement window expiredYou're trying to send a free-form message > 24h after the customer's last message. Use a template instead.
#133010Phone not registeredYour WhatsApp number is not registered on Cloud API, or you're using the wrong Phone Number ID.
#190Token expiredYour access token is a temporary 24h one. Generate a permanent System User token (see Step 11).
#200Permission errorToken is missing whatsapp_business_messaging scope. Regenerate the System User token with both whatsapp_business_messaging AND whatsapp_business_management.
App in dev modeMessage silently ignored for non-testersApp 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.