Skip to main content

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.
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.

Connection rules

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 for the schema and responses.