Overview
WATI APIs now support BSUID (Business Solution User ID) — a stable, cross-channel identifier for contacts. This enables identification of contacts beyond phone numbers.
Three new identifiers are exposed:
| Identifier | Description | Nullable |
|---|---|---|
contactId | The existing MongoDB Contact ID, now exposed as a stable external API identifier | No |
bsuid | New cross-channel stable identifier for contacts | Yes |
username | Human-readable handle (e.g., @bob) | Yes |
Unified Target Format
Many API endpoints accept a polymorphic target parameter that supports multiple identifier formats:
| Format | Example | Resolves to |
|---|---|---|
| Phone Number | 14155552671 | Contact by phone, default channel |
| Contact ID | 507f1f77bcf86cd799439011 | Contact by MongoDB ID |
| BSUID | US.123124141512 | Contact by Business Solution User ID |
| Channel:Phone | MyChannel:14155552671 | Contact scoped to specific channel |
| Channel:ContactId | MyChannel:507f1f77bcf86cd799439011 | Contact + channel |
| Channel:BSUID | MyChannel:US.123124141512 | Contact by BSUID + channel |
| Conversation ID | 685bd235e6119686e693a093 | Direct conversation (conversation endpoints only) |
The system automatically detects the format based on the value pattern.
API Changes
V1/V2 Endpoints
Route parameter endpoints (e.g., getMessages/{whatsappNumber}, sendSessionMessage/{whatsappNumber}):
- The path parameter now accepts Phone Number, Contact ID, or BSUID
Query parameter endpoints (e.g., sendTemplateMessage, assignOperator):
whatsappNumberis now optional (was required)- New
targetparameter added (optional) - At least one of
whatsappNumberortargetmust be provided
Body schema endpoints (e.g., sendTemplateMessages, updateChatStatus):
whatsappNumberfield is now nullable (was required)- New
targetfield added - At least one must be provided per record
V3 Endpoints
V3 already uses a polymorphic target field. The change adds support for BSUID and Channel:BSUID formats to the existing resolver.
Template send/schedule endpoints:
phone_numberis now optional (was required)- New
targetfield added as alternative
Response Enrichment
Contact-related API responses now include additional identifiers:
{
"id": "507f1f77bcf86cd799439011",
"phone": "14155552671",
"bsuid": "US.123124141512",
"parentBsuid": "US.ENT.789456123",
"username": "@bob"
}| Field | Type | Description |
|---|---|---|
bsuid | string/null | Business Solution User ID |
parentBsuid | string/null | Enterprise-level parent BSUID |
username | string/null | Human-readable username handle |
Thephonefield remains present in responses but is now nullable — it will be omitted when null. Existing consumers that assumephone != nullshould be updated.
Webhook Changes
Existing Webhooks (Additive)
All existing webhook event types now include bsuid, parentBsuid, and username when available:
{
"eventType": "message",
"waId": "8618719149214",
"bsuid": "HK.xxxxxxxxxxxxx",
"parentBsuid": "HK.ENT.xxxxxxxxxxxxx",
"username": "@bob",
...
}waIdremains required (always present)bsuid/parentBsuid/usernameare optional (included when available)- Existing consumers that ignore unknown fields continue to work
BSUID-First Webhooks (New Contract)
New webhook event types with _bsuid suffix use BSUID as the primary identifier:
{
"eventType": "message_bsuid",
"bsuid": "HK.xxxxxxxxxxxxx",
"parentBsuid": "HK.ENT.xxxxxxxxxxxxx",
"username": "@bob",
"waId": "8618719149214",
...
}bsuidis required (always present)waIdis optional (may be omitted)- Consumers must identify the user by
bsuid, not phone
See the individual BSUID webhook pages for full payload examples.
Migration Guide
| Scenario | Recommendation |
|---|---|
| Existing integration using phone only | No changes required. Keep using existing endpoints and webhooks. |
| Want to adopt BSUID gradually | Start using bsuid from existing webhook responses (when present). Use target parameter with BSUID in API calls. |
| Want BSUID-first behavior | Subscribe to _bsuid webhook events. Build handlers that do not require phone. |
| Migrating from phone to BSUID | Dual-run both webhook versions, compare identity handling, then cut over. |

