The Meta contact book is a portfolio-scoped feature that helps preserve phone-number continuity when WhatsApp users adopt usernames.
What the Contact Book Does
When the contact book is enabled, Meta stores a user's phone number and BSUID for your business portfolio after qualifying interactions. Once stored, Meta can keep including that user's phone number in webhook payloads even if the user later adopts a username.
Qualifying interactions include:
- you send a message to the user's phone number,
- you call the user's phone number,
- you receive a message from the user's phone number,
- you receive a call from the user's phone number.
Only interactions after contact book rollout populate the contact book. Older interactions are not retroactively imported.
Phone Number Inclusion
A user's phone number can appear in webhooks when:
- the relevant business phone number sent a message or call to the user's phone number within the last 30 days,
- the relevant business phone number received a message or call from the user's phone number within the last 30 days,
- the user is in the portfolio-level contact book.
The 30-day interaction checks are per business phone number. The contact book is scoped to the business portfolio, so any business phone number in that portfolio can benefit from a stored contact book entry.
Retention and Disablement
Contact book data is retained until you disable the feature or deactivate the account.
Meta's documentation says the contact book can be disabled in Meta Business Suite under Business settings > Business info. Disabling stops new storage and deletes existing contact book data. If you re-enable it later, previously deleted entries are not restored.
If you have multiple business portfolios enrolled in the same parent BSUID account, contact books are still separate. Phone number and BSUID pairs must be recorded independently in each portfolio's contact book.
Delete Contact Book Entry
Use the Contact Book API to delete a specific contact book entry:
DELETE /<BUSINESS_PHONE_NUMBER_ID>/contact_book?messaging_product=whatsapp&bsuid=<BSUID>
Rules:
bsuidmust be a regular BSUID in standard format, for exampleUS.13491208655302741918.- The BSUID must belong to the same business portfolio as the business phone number.
- Parent BSUIDs are not supported for contact book deletion.
Response:
{
"messaging_product": "whatsapp",
"success": true,
"deleted": true
}
deleted is true when an entry existed and was deleted. It is false when no matching entry was found.
REQUEST_CONTACT_INFO
REQUEST_CONTACT_INFO lets you ask a WhatsApp user to share their phone number. It can be used in utility and marketing templates or as an interactive message.
Template button component:
{
"type": "buttons",
"buttons": [
{
"type": "REQUEST_CONTACT_INFO",
"text": "Share Contact Info"
}
]
}
The button does not require dynamic parameters when sending the template.
Interactive message shape:
{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"recipient": "<BSUID>",
"type": "interactive",
"interactive": {
"type": "request_contact_info",
"body": {
"text": "Please share your contact information."
},
"action": {
"name": "request_contact_info"
}
}
}
Contacts Webhook
When a user shares contact information, the messages webhook carries a contacts message.
New or important fields:
| Field | Behavior |
|---|---|
contacts[].profile.username | User username when adopted. |
contacts[].user_id | User BSUID. |
messages[].from_user_id | User BSUID. |
messages[].contacts[].origin | contact_request when shared through the button, other when shared directly in chat. |
messages[].contacts[].vcard | Included for direct contact sharing (origin: "other"). Omitted for contact_request. |
messages[].contacts[].phones[] | Shared phone-number data, including phone, wa_id, and type. |
If contact book is enabled, Meta can add the shared phone number to your contact book.
Local Storage Note
For businesses using Local Storage, Meta extracts the user's phone number from the shared contact card and stores that phone number in the Meta-hosted contact book. Only the phone number is extracted and stored; other vCard data is not retained beyond Meta's standard data-in-use period described in its docs.
This means contact-request flows can still affect contact book behavior, but your own endpoint may also receive the full vCard in the webhook. Treat your endpoint and downstream logs as part of your privacy boundary.
Dualhook Boundary
Dualhook does not populate, delete, or manage Meta contact book entries. Contact book entries are created by interactions and contact-sharing events in your message flow, which is direct-routed from Meta to your endpoint via Webhook Override.
Dualhook also does not store the contacts webhook payloads that contain shared phone numbers or vCards.