This guide is for the typical CodeCanyon buyer who wants to send WhatsApp messages from their own WhatsApp Business Account (WABA) — without becoming a Meta Tech Provider or BSP. Total setup time: about 5 minutes.
When to use Manual Setup vs Embedded Signup:
- Manual Setup (this article) — you have one WABA and you want to send from it. No Meta approval needed. Works today.
- Embedded Signup (the "Connect via Embedded Signup" button) — only available to Meta-approved Tech Providers / BSPs. If you see the error "Embedded signup is only available for BSPs or TPs", your app is not Tech Provider approved — use Manual Setup instead.
You do NOT need: Tech Provider approval, App ID, App Secret, App Review, or a Configuration ID.
XSender API. Role: Admin. Click Create System User.whatsapp_business_management, whatsapp_business_messaging.EAAB... and Meta will not display it again.XSender API System User → permission: Full Control → Assign.Without this step the token cannot send messages from your WABA — even though it's a valid token.
Open developers.facebook.com/apps → your App → WhatsApp → API Setup. The page shows:
Copy both.
0.5 is a safe default.2.50.5.200.EAAB... token from Step 1.The rate-limit fields above are conservative defaults. Increase them once you have warmed up your number with real traffic. Lower means slower but safer; higher means faster but more likely to trip WhatsApp's anti-spam.
This is required for delivery + read receipts to appear in XSender.
messages — receive incoming messages.message_status — delivered + read receipts.message_template_status_update — template approvals.+15555550123).pending → sent → delivered → read (once you open the message on your phone).| Symptom | Likely cause | Fix |
|---|---|---|
| "Embedded signup is only available for BSPs or TPs" | You clicked the wrong button | Use Add Manually, not Connect via Embedded Signup. |
| Save returns "Invalid OAuth access token" | Token was copied incompletely, or the System User was not assigned to the WABA | Re-generate the token (Step 1) and confirm the WABA assignment (Step 2). Tokens are usually 200+ characters. |
| Send returns "(#100) The parameter messaging_product is required" | Phone Number ID belongs to a different WABA, or the number is not yet registered | Re-check Step 3 values in Meta Developer Portal → WhatsApp → API Setup. |
| Send returns "Recipient phone number not in allowed list" | Your Meta App is in Development mode | Meta Developer Portal → your App → App Mode → switch to Live. Note: requires a Privacy Policy URL. |
| Webhook verification fails in Meta | Callback URL not reachable, or Verify Token mismatched | Confirm https://yourdomain/api/whatsapp/webhook returns 200 in a browser. Re-copy the Verify Token exactly — no leading/trailing spaces. |
Status stays at sent, never advances to delivered or read | Webhook not configured, or required fields not subscribed | Re-do Step 5 and tick message_status. |