# Contact Info Request Messages

> Ask a WhatsApp contact to share their phone number with a single tap. Essential for contacts who adopted a username and hid their number.

Send a message with a **Share Contact Info** button. When the contact taps it and confirms, their phone number arrives back in the conversation as a regular inbound `contact` message.

This matters most for contacts who adopted a [WhatsApp username](https://www.zavu.dev/docs/guides/whatsapp/usernames) and hid their phone number: it is the official way to recover a number you can call, text or verify.

## Send a Contact Info Request

The prompt goes in `text`. There is no `content` object: WhatsApp owns the button, so there is nothing to configure.

```typescript
const message = await zavu.messages.send({
  to: "US.13491208655302741918",
  channel: "whatsapp",
  messageType: "request_contact_info",
  text: "Share your phone number so our team can call you back."
});
```

```bash
curl -X POST https://api.zavu.dev/v1/messages \
  -H "Authorization: Bearer zv_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "US.13491208655302741918",
    "channel": "whatsapp",
    "messageType": "request_contact_info",
    "text": "Share your phone number so our team can call you back."
  }'
```

`to` can be a phone number or a BSUID. Asking a phone-number contact is valid too, for example to confirm the best callback number.

## Receiving the Answer

The reply arrives as a standard `message.inbound` webhook with `messageType: "contact"`, carrying the shared number in `content.contacts`:

```json
{
  "type": "message.inbound",
  "data": {
    "messageId": "msg_xyz789",
    "from": "US.13491208655302741918",
    "channel": "whatsapp",
    "messageType": "contact",
    "content": {
      "contacts": [
        {
          "name": "Sheena",
          "phones": ["+16505551234"]
        }
      ]
    }
  }
}
```

> **Note:**
> When the sender was only known by BSUID, Zavu automatically links the shared phone number to that contact. You do not need to update the contact yourself: from that point on, the phone number and the BSUID resolve to the same contact and conversation. Your sender's webhook receives a [`contact.identity_linked`](https://www.zavu.dev/docs/guides/receiving-messages/events) event with `reason: "contact_shared"`. Sharing is not the only way a number gets linked; see [Usernames & BSUIDs](https://www.zavu.dev/docs/guides/whatsapp/usernames#from-can-change-for-the-same-person).

## In Templates

Outside the 24-hour window, use a template with a `request_contact_info` button instead. See [Template Button Types](https://www.zavu.dev/docs/guides/whatsapp/templates/overview#button-types).

## Specifications

| Property | Requirement |
|----------|-------------|
| text | Required, max 1024 characters |
| content | Not used |
| channel | WhatsApp only |
| Button label | Fixed by WhatsApp, not customizable |

> **Note:**
> Like every non-template message, a contact info request needs an open [24-hour conversation window](https://www.zavu.dev/docs/guides/whatsapp/overview). Outside the window, open the conversation with a template first.

## Use Cases

- Recovering a callable number for a [username contact](https://www.zavu.dev/docs/guides/whatsapp/usernames) known only by BSUID
- Confirming the best callback number before a support call
- Collecting a number for SMS fallback or delivery notifications
- Identity checks that require a verified phone number
