Usernames and business-scoped user ids
WhatsApp is rolling out usernames. A contact who adopts one may stop sharing their phone number with businesses they have not talked to recently. To keep every chat working, Meta gives each person a business-scoped user id (BSUID), such asUS.13491208655302741918: a stable id for that person, unique to your business portfolio.
What LazyApp does for you:
- Every message keeps its contact, even when Meta leaves out the phone number. The contact is stored with their BSUID, and their username is shown as their name.
- When Meta shares a phone number later, it is added to the same contact.
- When someone changes their phone number, Meta sends a
user_changed_number(oruser_changed_user_id) notice with their old and new ids. LazyApp moves the new number and BSUID onto the same contact, so history, consent and tags follow them. You getcontact.updated. - Delivery statuses carry the recipient’s BSUID, which LazyApp adds to the contact.
recipient:
"type": "parent_bsuid" for a parent BSUID (US.ENT.…), which works across portfolios enrolled in the same parent account. Authentication templates with one-tap, zero-tap or copy-code buttons need a phone number; Meta refuses them for BSUIDs (error 131062). To ask a username contact for their number, send a contact_information_request interactive message.
Webhooks include contact.bsuid and contact.username on every message.
Meta’s contact book
Meta keeps a contact book for your business portfolio: the phone number next to the BSUID, so webhooks keep showing the number after a contact adopts a username. Meta fills it on every chat; you switch the whole feature on or off in Meta Business Suite → Business settings → Business info. You can check one contact, or remove them (for example for a data-deletion request):Identity change check
If you share private information on WhatsApp (bank statements, test results, account changes), you need to know when the person behind a number may have changed, for example a recycled SIM. Turn on the identity check for the number:- WhatsApp includes each customer’s identity hash in webhooks. LazyApp keeps it on the contact (
identity.key_hashonGET /v1/contacts/{contact}) and sends it back with every message. - If the identity changed, WhatsApp does not deliver the message (status
failed, code137000), or a new message arrives with a different hash. LazyApp marks the contact (identity.changed_at) and sendscontact.identity_changed. - From then on LazyApp holds every message to that contact with
code: identity_changed, so an automation cannot leak anything while nobody is looking. - Verify the person another way (a call to the number on file, your app). Then acknowledge:
recipient_identity_key_hash on POST /v1/messages; it overrides the stored one.
In the console: WhatsApp numbers → Settings → Privacy & safety to turn it on. The inbox shows a warning on an affected chat with an I’ve verified them button.
Block people
Blocking stops someone from messaging your number, and you from messaging them. Use it for spam or abuse, not for opt-outs.- Phone numbers and BSUIDs both work. Parent BSUIDs are refused by Meta.
- WhatsApp only lets you block someone who messaged you in the last 24 hours.
- Up to 1,000 people per request; the list holds up to 64,000.
- Meta answers per person. The response lists
failureswith a plainmessage, for example “WhatsApp only lets you block someone who messaged you in the last 24 hours.” DELETEthe same path to unblock.GETit to page through the block list (next_cursor).
phone_numbers field still works. Blocking a contact from the console also stops every LazyApp send to them; unblocking lifts it.
Opt-in
WhatsApp requires opt-in before you message someone. It can be collected anywhere (your website, a form, a call, in person) as long as it clearly names your business and says they will get messages, and you follow local law.- Record opt-ins you collected elsewhere with
POST /v1/contacts/{contact}/consent. - Contacts who reply with stop words are opted out automatically, and marketing to them is refused (
code: marketing_opt_out). - Ask for opt-in per kind of message (order updates, offers) so people are not surprised, and watch your number’s quality rating when you try a new opt-in method.
Where WhatsApp stores your messages
By default Meta keeps message content in its own data centres for up to 30 days. For regulated businesses, a number can instead use:
Local storage countries: Australia (
AU), Indonesia (ID), India (IN), Japan (JP), Singapore (SG), South Korea (KR), EU – Germany (DE), Switzerland (CH), United Kingdom (GB), Brazil (BR), Bahrain (BH), South Africa (ZA), United Arab Emirates (AE), Canada (CA).
With no storage:
- Download media customers send within the hour; after that it is gone.
- If your webhook endpoint is down for more than an hour, those messages are lost.
- Media you upload is kept for 24 hours instead of one, so a campaign can reuse an image.
Security on the platform
- Messages between WhatsApp and Meta are end-to-end encrypted; Cloud API holds the keys for your number. API calls and webhooks use TLS.
- LazyApp keeps access tokens and two-step PINs encrypted, and never writes a one-time passcode into webhooks or logs.
- WhatsApp Flows payloads are encrypted with your number’s flow key; LazyApp manages that key for you.
- See Security for how LazyApp protects your workspace.