Your own Meta app
Bring a WhatsApp Business Account you already run at Meta. Mobile Sasa charges a flat platform fee per message; Meta bills you for the conversations.
What you need from Meta
- A Meta app with the WhatsApp product added, in live mode.
- A WhatsApp Business Account (WABA) with a verified business and a registered phone number.
- A System User access token that never expires, with
whatsapp_business_messagingandwhatsapp_business_managementpermissions, assigned to that WABA. - The phone number ID and WABA ID from the WhatsApp section of the app dashboard, and the app ID and app secret from App settings → Basic.
Connect them with POST /api/v1/whatsapp/accounts (see the overview) or from the portal under WhatsApp → My numbers → Add my own number. The token is checked against Meta before anything is saved, the number and verified name are read back, and the templates on the WABA are pulled in.
Point the webhook at Mobile Sasa
Statuses (sent, delivered, read, failed), replies and template review results all arrive by webhook. In the app dashboard, WhatsApp → Configuration → Webhook:
| Callback URL | https://api.mobilesasa.com/webhooks/whatsapp |
| Verify token | Ask support (WhatsApp 0707 861 420 or [email protected]); it is one value for all own-app connections. |
| Fields to subscribe | messages and message_template_status_update |
Every POST is matched to your account by the WABA ID inside the payload and, when you gave us the app secret, its X-Hub-Signature-256 is verified against it first. Without the secret, status updates are still applied but anyone who finds the URL could post fake ones, so do give it.
One webhook per app
/api/v1/whatsapp/messages and in the portal.Billing on your own app
- Mobile Sasa charges the
own_app_feefromGET /api/v1/whatsapp/pricingper accepted message, from your wallet, and refunds it when Meta refuses the message. - Meta charges the conversation (marketing, utility or authentication) to the payment method on your WABA. Nothing of that passes through Mobile Sasa.
- Templates you create through the API are created on your WABA under the name you give; no team prefix.
Usernames and hidden phone numbers
WhatsApp lets people pick a username and hide their phone number from businesses. Since April 2026 Meta's webhooks may identify a person by a business-scoped user ID (BSUID) instead of a phone number. Mobile Sasa stores it as user_id on both sent messages and replies, and msisdn is then empty.
- A BSUID is specific to your business portfolio. The same person has a different ID with every business, so it cannot be used to look anyone up or shared between accounts.
- You can send to a BSUID only within the portfolio that issued it. Sending by phone number remains the normal, recommended path; a number Meta cannot reach as a username-only user fails with Meta error
131062, refunded as usual. - Keep phone numbers as your primary customer key where you have consent for them; treat
user_idas a routing identifier for that conversation, not as contact data.
On the Mobile Sasa number
user_id instead of a number. The inbox shows them as "WhatsApp user".Checking the connection
# Your numbers, with mode and template counts
curl https://api.mobilesasa.com/api/v1/whatsapp/accounts -H "Authorization: Bearer mbs_…"
# Pull template statuses from Meta right now
curl -X POST https://api.mobilesasa.com/api/v1/whatsapp/accounts/ACCOUNT_UUID/templates/sync \
-H "Authorization: Bearer mbs_…"If the token is revoked or expires, sends fail with Meta error 190 and are refunded; reconnect the account with a fresh token.