> ## Documentation Index
> Fetch the complete documentation index at: https://docs.notifique.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Typing indicator

> Show that your business is preparing a WhatsApp reply on QR, Meta Cloud, and Gupshup connections.

## In a few words

* Use `POST /v1/whatsapp/messages/presence` to show **typing...**.
* Official Meta and Gupshup connections require `messageId`, the ID of an incoming message on that instance.
* QR connections require `to`; `messageId` is optional, and `recording` remains QR only.

An official call also marks the incoming message as read. The indicator disappears when a reply is sent or after up to 25 seconds, depending on the provider.

## How to use it

Send `composing` to start the indicator. Set `from` to the instance ID, the line's E.164 phone number, or the instance name. The legacy `instanceId` field is also accepted; if both are present, `from` takes precedence. Sending pools are not accepted because presence must target one specific line. Use the external ID from the official inbound webhook (`messages[].id`) in `messageId`. `GET /v1/whatsapp/messages/inbound` also returns this value as `externalMessageId`; its `id` field is internal and cannot be used for official presence.

### Official Meta or Gupshup connection

This example sends the indicator for the incoming `wamid...` message using the line's phone number in `from`.

```bash theme={null}
curl -X POST 'https://api.notifique.dev/v1/whatsapp/messages/presence' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "from": "+5528999999999",
    "presence": "composing",
    "messageId": "wamid.HBgNNTUxMTk5OTk5OTk5FQIAEhgg..."
  }'
```

`messageId` must be the external `messages[].id` from the inbound webhook, matching `externalMessageId` in the inbound list. Do not use the list's internal `id`. The API checks that it belongs to the instance and workspace of the API key. IDs from another line, outbound messages, and IDs not yet stored return `404 WHATSAPP_PRESENCE_MESSAGE_NOT_FOUND`.

### QR connection (unofficial)

For QR, pass the recipient in `to`. You can send `composing` or `recording`.

```json theme={null}
{
  "from": "+5528999999999",
  "to": "5511999999999",
  "presence": "composing"
}
```

## Connection rules

| Connection | `to` | `messageId` | `presence` values |
| - | - | - | - |
| Official Meta Cloud API | Ignored | Required: incoming message ID | `composing` |
| Official Gupshup (BSP) | Ignored | Required: incoming message ID | `composing` |
| QR / Evolution | Required: phone or JID | Optional | `composing`, `recording` |

> [!NOTE]
>
> Send the indicator only when the customer will notice a delay. Each official call also marks the inbound message as read, so do not call this endpoint just to renew the indicator.

See the [WhatsApp OpenAPI reference](https://docs.notifique.dev/en/whatsapp-api/api-reference/openapi-whatsapp.json) for the schema and responses.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.