Skip to content
SocialMate
Blog · Comparisons · · 17 min read

WhatsApp BSUID Migration: What Inbound-Only Teams Can and Cannot Skip

If a business-scoped identifier lands in Cloud API payloads, replying-only does not exempt you. A self-hosted route on your own number never receives the field at all.

Two streams of light diverge, one passing through a translucent membrane and one taking an outer path to a glowing local node

BSUID is a reported business-scoped identifier for WhatsApp Cloud API payloads, and inbound-only teams cannot skip it there: it arrives in the inbound webhook. A self-hosted app on your own number never receives Cloud API payloads, so the field does not exist on that route.

What Is the WhatsApp BSUID Migration, in Plain English?

BSUID is reported to be a business-scoped user identifier: a key that names a person inside your business namespace instead of handing you a phone number that travels with them. Vendors describe it arriving alongside WhatsApp usernames. No dated Meta release note confirms any of it, and that absence is the most important fact on this page.

Put every claim you read about this on one of three shelves.

Shelf Example What you may do with it
Confirmed The Cloud API webhook, as documented today, identifies an inbound sender by wa_id in the contacts array Build on it
Reported by a vendor Twilio's changelog names a June 2026 field requirement; Gupshup's changelog page is dated March 2026 Read the vendor's own changelog, with its date, before acting
Unverified Aggregated summaries that cite no primary document Ignore

Both of those are integrator notes, not a platform announcement. We have found no dated Meta release note for the field. Treat any date you see, including the two above, as that vendor's own integration plan and read its changelog before you act. That is a weaker claim than most posts about this will make, and it is the honest one.

The design work below is worth doing anyway. Payload contracts move constantly, and identity handling is where the damage lands. Do not start a refactor on a changelog line alone.

For the platform-wide change cycle this belongs to, read WhatsApp messaging limits in 2026.

Why Can't an Inbound-Only Team Skip the Migration on the Cloud API?

On the Cloud API an inbound-only team cannot skip it, because the identifier would arrive inside the inbound message webhook on the customer's first message, before any reply exists. Replying first does not put you downstream of the field. It puts you first in line for it.

The assumption that costs teams most is "we only reply, so identity work is the sender's problem." It is the reverse. The receiver is exactly who must persist the key.

The inbound flow, four steps.

  1. A customer messages your WhatsApp Business number.
  2. Meta delivers a webhook to your endpoint carrying the sender's identity value and message metadata.
  3. Your handler parses it, resolves the identity against your contact record, and stores the message.
  4. Your reply goes back through the Cloud API, referencing the conversation.

Step 3 is the migration. Step 4 is where template work lives, and it is the only part an inbound-only team can realistically defer. Webhook deliveries can repeat, which makes step 3 a deduplication problem as well as a parsing problem.

Three things your handler must survive.

  • An identifier you have never seen. A first-time contact has no local record. You create one from the identifier alone.
  • Duplicate deliveries. Without idempotent handling you create the contact twice and answer the message twice.
  • A partial identity. If the phone number is absent or unusable in some payloads, resolution must still complete.
// Dedupe on the delivery, key on your own id.
await db.deliveries.upsert(event.id, { receivedAt: Date.now() });
const contact = await db.contacts.upsert(
  { localId: localKeyFor(event) },        // yours, stable
  { externalIds: { wa: event.from } }     // theirs, an attribute
);

Every one of those is inbound work. None of it is template work.

What Can an Inbound-Only Team Skip, and What Must It Still Build?

An inbound-only team can defer template namespace work, outbound template payload changes and outbound template fan-out. It cannot defer capturing the identifier, resolving a contact when only the identifier is present, deduplicating retried deliveries, logging the mapping, or keying its own records. Outbound ceremony is optional. Inbound plumbing is not.

Hand this to an engineer on Monday.

Deferrable, if you genuinely send nothing outbound:

  • Template creation, namespace registration and per-template approval cycles.
  • Updating outbound template payloads to the new identity shape.
  • Outbound template fan-out, carrying one template definition across every recipient record.
  • Template quality and pause-state monitoring, since you have no templates to pause.

Not deferrable, under any inbound-only reading:

  • Capturing the identity value from every inbound webhook, from day one.
  • Contact resolution when only the identifier is present.
  • Mapping the identifier onto your own primary key, and keeping that mapping.
  • Idempotent webhook handling, so a retried delivery does not fork a contact.
  • Audit logs, so you can answer "which conversation was this?" a year later.

The one design constraint that matters: never make the identifier your only primary key. Store it as an attribute on a record you own, keyed by something you control. If the value's shape shifts again, you re-map an attribute instead of rebuilding a table. Read endpoints stay stable, exports stay intact, and the next payload change costs you a field, not a quarter.

The comparison table shows how much of this work each route requires.

How Do the Four Routes Compare?

Four routes exist, and they differ less on effort than on whose identity namespace you live in: full Cloud API migration, inbound-only Cloud API migration, self-hosted open source, and a self-hosted product such as SocialMate. Only the first two ever receive the field. The last two never see it. The table summarises; the verdicts carry the reasoning.

Full Cloud API migration. You accept the change end to end, inbound and outbound, and stay on Meta's official surface at the highest payload cost. It fits teams that send templates or need documented platform status. The trade-off: identity, metering and approval stay outside your control. Compare the vendor set on Cloud API versus self-hosted.

Inbound-only Cloud API migration. You do the inbound third and defer the rest. That is real scope reduction, not an exemption. It fits a reply desk with no outbound programme, and leaves you metered and inside Meta's policy surface.

Self-hosted open source such as Evolution API and WAHA. They run on infrastructure you control, so no Cloud API payload reaches you. You own the operational stack in exchange: most assume a container, and the anti-ban engine, GUI and storage layer are yours to assemble. Check each project's install guide and release notes rather than a blog claim. The trade-off is that unofficial protocol access carries ban risk and the safety scaffolding is yours. Full detail on self-hosted APIs.

SocialMate. A desktop app for Windows, macOS and Linux, or a headless VPS install, running your own WhatsApp number. It never enters the Cloud API identity namespace, so no identifier field arrives. It ships the anti-ban stack, local storage and a browser admin console for servers, on a flat licence with no per-message fee. No WhatsApp Business or Meta approval is required.

The honest trade-off is the one every self-hosted route carries: you are off Meta's official rails, so bans remain possible, consent is still required, and pacing is still a discipline. SocialMate engineers the pacing. It does not repeal the risk.

If you only reply to people already waiting on you, run the one-number test below before you commit to anything larger: download the free desktop app and use it for a week.

Does Self-Hosting Actually Skip BSUID, or Just Move the Work?

A self-hosted app on your own WhatsApp number genuinely avoids the identifier: no Meta webhook reaches your machine, so there is no field to capture and no mapping table to keep. That is an architectural difference, not a regulatory exemption, and it should never be described as one. The work is not moved. It does not exist.

What disappears. The identity field, the payload cutover, the mapping table, the fallback path for identifier-only contacts.

What you take on instead.

  • Number safety. Unofficial protocol access always carries ban risk, and no tool guarantees against it. Our knowledge base answers "Will I get banned?" without a sales gloss.
  • Consent. Self-hosting does not make unsolicited messaging acceptable. It removes a platform gate, which raises your responsibility rather than lowering it.
  • Pacing. Cloud API limits are enforced for you. Self-hosted, you enforce them: randomised delays and jitter, per-number rate limits, session warming, a duplicate-content guard, and an adaptive throttle that slows sends as risk climbs.
  • Data custody. Chats and contacts sit on your machine. That is the privacy win and the backup obligation in one.

One network nuance, stated plainly. A desktop install connects from your own residential IP, ideally the same home network as the phone that owns the number, which is the picture WhatsApp already associates with it. That removes a risk factor; it does not make a number safe. A VPS runs on a datacenter IP with lower network reputation. SocialMate's Pro per-account proxy routing lets a server account egress through your own residential or mobile proxy, but it changes the network path only: it never bypasses rate limits or warming and never lets you send faster. The knowledge base covers the trade in "Desktop vs VPS: which is safer for your number?" at /kb.

Developer surface, in two sentences, since it is not the subject here. SocialMate's local HTTP API runs on Free, not Pro: read endpoints, plain-text send, quoted replies, reactions, mark-as-read and the typing indicator, with 9 of 35 webhook events free. Pro adds media, polls, group operations, a stable named tunnel, full history and search, the smart queue, scheduled messages and Agent Memory, which stores what your own model learned because SocialMate runs no model of its own; the API docs cover it.

For the wider data-custody argument, self-hosted messaging independence is the companion read.

What Does Staying on the Cloud API Actually Cost an Inbound-Only Team?

For an inbound-only team the Cloud API is often cheap on paper and expensive in engineering time: replies inside the 24-hour customer service window have historically been the cheapest traffic, while template messages carry the per-message charge. Meta sets and changes those rates on its own schedule, so read the live rate card rather than any blog figure, including ours.

Name the categories before you compare prices, because they are not the same line item: a per-message rate from Meta, a per-account or percentage fee from your BSP, and your own engineering hours. The 2026 cost model works through the full metered-versus-flat arithmetic.

The arithmetic, using figures we can stand behind. Take a reply desk handling 900 service-window replies a month and one developer day per month on maintenance. On the Cloud API that is Meta's rate times 900, plus the BSP fee, plus the identifier migration as unpaid hours on top. On a flat licence the per-message term is zero and the licence is fixed at $0, $10 a month or $99 a year. Substitute your own volume; the shape does not change.

The SocialMate numbers, stated exactly.

  • Free: $0 forever, no card. 200 messages a day on one account, one device.
  • Pro: $10 a month, or $99 a year ($8.25 a month equivalent). Cancel anytime.
  • Pro starts at a safe 500 messages a day per account and, after 72 hours of warming, High-Volume Mode scales it to a maximum of 5,000 a day per account.
  • One licence includes one device; extra seats cover more concurrent machines. WhatsApp accounts are unlimited on Pro.
  • The 7-day Pro trial is opt-in, started inside the app, and asks only for an email.

The caveat belongs in the same paragraph. Higher volume is never risk-free. Warming is not optional, and 5,000 a day is a ceiling the warming protocol unlocks, not a day-one target. Bans remain possible on every route, including this one.

If your baseline is a BSP trial credit, what $0 really buys with Twilio is the honest accounting.

Which Route Should You Choose This Week, and What Rules It Out?

Choose on the constraint you cannot give up: templates, official platform status, a contractual SLA, or the willingness to own number safety. The first three rule out self-hosting. The fourth rules it in. Teams make the expensive mistake by choosing without knowing which constraint they traded away.

If you send templates or need Meta's official surface, do the minimal Cloud API migration. Not the whole programme. Capture the identifier inbound, map it to a record you own, make the handler idempotent, log the mapping. Defer template namespace work until you actually send a template. On a small codebase that is a contained piece of work.

If you only reply inbound on your own number, test one number for one week. Real conversations with people already waiting on you. Watch the risk score, respect the warming window, keep volume modest. If the number stays healthy and the team stops thinking about it, expand. If it does not, you spent a week rather than a quarter.

What rules the self-hosted route out. If procurement, an enterprise client or a regulator requires documented WhatsApp Business API onboarding, this route does not satisfy it. If you send templates at scale, templates are a Cloud API construct and do not exist off that rail. If you need a vendor-held uptime commitment, software on your machine has none; Pro adds auto-start on boot and auto-reconnect, which is engineering, not a contract. If you cannot accept any ban risk, stop here.

SocialMate is independent and is not affiliated with, endorsed by, or partnered with WhatsApp or Meta. It is not the official WhatsApp Business API. Its terms state that it is "not a bulk-messaging, broadcast, or spam platform" — the approved framing is a batch, meaning individual, personalised messages each paced by the anti-ban pipeline.

What you accept, if you proceed, is a trade: Meta approval and per-message metering out; number safety, local data custody and your own pacing discipline in. For an inbound-only team with a healthy number and a developer who would rather ship than migrate a field their route never receives, that trade usually pays. Start with the free download, or read pricing first. Both are legitimate. The mistake is choosing without knowing which one you made.

Route Migration work required Pricing model Ban / account risk Where data lives Best for
Full Cloud API migration Full: inbound capture, template payloads, outbound template fan-out Metered per message per Meta's rate card, plus a BSP fee Official protocol; policy, quality-rating and template-pause risk apply Meta and your BSP's cloud Teams that send templates or need official status
Inbound-only Cloud API migration Partial: inbound capture, fallback, mapping, dedupe, audit logs Metered per message, plus a BSP fee; replies inside the 24-hour service window have been the cheapest traffic Same policy and quality-rating exposure Meta and your BSP's cloud Reply desks with no outbound programme
Self-hosted open source (Evolution API, WAHA) None: no Cloud API payloads reach you Free software; you fund hosting and engineering time Unofficial protocol access; anti-ban logic is yours to build Your server, your storage Engineers who want full control of the stack
SocialMate None: an own-number route never enters the Cloud API namespace Flat licence, no per-message fee. Free $0; Pro $10/mo or $99/yr Unofficial protocol access; engineered anti-ban stack, risk reduced not eliminated Local storage on your machine or your own VPS Inbound-only teams wanting shipped anti-ban, local data, a GUI and no Meta approval
Four routes through a reported WhatsApp BSUID migration, compared on identity work, pricing model, account risk and data location

How to make an inbound-only Cloud API handler identifier-safe

  1. Confirm the payload contract Read the Cloud API reference you actually build on and record which identity fields an inbound webhook carries today. Do not act on a vendor changelog date alone.
  2. Give your records their own key Ensure every contact row has a primary key you control. The WhatsApp identifier becomes an attribute on that row, never the key itself.
  3. Add a resolution fallback Write the path that creates a contact when only the identifier is present, and test it with the phone number deliberately removed from the fixture.
  4. Make delivery handling idempotent Record each webhook delivery id before processing. A retried delivery updates state instead of forking a contact or sending a second reply.
  5. Log the mapping and keep it Write an audit row for each identifier-to-record mapping so any conversation can be traced later, after the payload shape has moved again.

Frequently asked questions

What does BSUID stand for in the WhatsApp Cloud API?

BSUID stands for business-scoped user identifier, on the reporting we have seen: a key that names a person inside your business namespace rather than exposing a phone number that travels with them. What exists to point at are vendor documents and changelogs from Twilio, Wati, 360dialog, Vonage, Kapso and Gupshup, not a dated Meta release note. The Cloud API webhook, as documented today, identifies an inbound sender by wa_id, a phone-number-based WhatsApp ID in the contacts array. The practical risk: sender identity in an inbound payload becomes a value your schema has never stored.

Can an inbound-only team skip the BSUID migration entirely?

Not on the Cloud API. The identifier would arrive inside the inbound message webhook, so a team that only replies still receives it on every message and must store it. What an inbound-only team can defer is the outbound half: template namespace work, outbound template payload changes and outbound template fan-out. Inbound capture, contact resolution, deduplication and audit logging remain.

Does self-hosting really avoid BSUID, or just move the work elsewhere?

It genuinely avoids it. A self-hosted deployment on your own WhatsApp number receives no Meta Cloud API payload, so there is no field to migrate and no mapping table to keep. The work is not relocated; it does not exist on that route. What you take on instead is number safety, consent discipline, pacing and data custody.

Is a self-hosted route safer from bans than the Cloud API?

Different, not safe in absolute terms. The Cloud API carries policy, quality-rating and template-pause risk. Unofficial protocol access carries enforcement risk from WhatsApp itself. Bans are possible on both. Self-hosting can reduce risk through human-like pacing, per-number rate limits, session warming, a duplicate-content guard and an adaptive throttle, but no tool guarantees against bans and any product claiming otherwise is misrepresenting the position.

Is SocialMate's local HTTP API a Pro feature?

No. The local HTTP API runs on Free, including read endpoints and plain-text send up to 200 messages a day, plus quoted replies, reactions, mark-as-read and the typing indicator. Nine of the 35 webhook events are free. Pro adds media send, polls, locations, contact cards, group operations, unlimited webhooks, a stable named tunnel, full history and search, the smart queue, scheduled messages and Agent Memory.

What does SocialMate Pro cost, and how many messages can I send?

Pro is $10 a month or $99 a year, with no per-message fee. Free sends up to 200 messages a day on one account. Pro starts at a safe 500 a day per account and, after 72 hours of session warming, High-Volume Mode scales that to a maximum of 5,000 a day per account. One licence includes one device, extra seats cover more concurrent machines, and WhatsApp accounts are unlimited on Pro. The 7-day trial is opt-in and asks only for an email.

Do I still need consent if I only reply to inbound messages?

Yes. Consent is not a platform setting; it is what makes automation legitimate. Replies go to people already waiting on you: they ordered, they booked, they asked. SocialMate's terms state it is not a bulk-messaging, broadcast or spam platform, and the approved framing is a batch of individual, personalised messages paced by the anti-ban pipeline. The duplicate-content guard blocks identical text sent to many contacts on every tier; High-Volume Mode carries an override.

Is SocialMate affiliated with WhatsApp or Meta?

No. SocialMate is independent and is not affiliated with, endorsed by, or partnered with WhatsApp or Meta, and it is not the official WhatsApp Business API. Those names appear here for identification only. Choosing an unofficial automation route is a decision the operator makes and owns, including the account risk that comes with it.

Free forever · no card Download free