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

# WhatsApp Message Ack Status

> Understanding WhatsApp acknowledgment statuses and what they mean for your messages

## Overview

WhatsApp uses acknowledgment (ACK) statuses to indicate the delivery and read status of messages. Periskope displays these statuses using visual indicators to help you understand the current state of your messages.

**Important Notes:**

* ACK values are **monotonic** - they only increase (never decrease) once a message is sent
* For group chats, check the `delivery_info` object in the message payload for detailed participant-level delivery (`delivered_count`) and read (`read_count`) statistics
* The ACK status reflects the highest acknowledgment level achieved so far

## Message Status Types

### Message Failed

<div className="flex gap-2 items-center">
  `ack: -1`

  <div className="bg-white w-7 h-7 items-center flex justify-center rounded-md">
    <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
      <path d="M4 12l5 5 10-10" fill="none" stroke="#dc2626" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
    </svg>
  </div>
</div>

The message has failed to be sent. This indicates a delivery failure.

**What to do:** Please retry sending the message or restart the phone connection.

***

### Pending Send

<div className="flex gap-2 items-center">
  `ack: 0`

  <div className="bg-white w-7 h-7 items-center flex justify-center rounded-md">
    <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
      <path d="M12 6v6l4 2" fill="none" stroke="#6b7280" stroke-width="2" stroke-linecap="round" />

      <path d="M12 2 A 10 10 0 1 1 12 22 A 10 10 0 1 1 12 2" fill="none" stroke="#6b7280" stroke-width="2" />
    </svg>
  </div>
</div>

The message is not sent yet. It's queued and waiting to be sent to the WhatsApp server.

**What this means:** The message is in your outbox and will be sent when the connection is available.

***

### Sent to WhatsApp

<div className="flex gap-2 items-center">
  `ack: 1`

  <div className="bg-white w-7 h-7 items-center flex justify-center rounded-md">
    <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
      <path d="M4 12l5 5 10-10" fill="none" stroke="#6b7280" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
    </svg>
  </div>
</div>

Message has been sent to the WhatsApp servers, BUT is awaiting confirmation from WhatsApp

**What this means:**

* Messages typically should not be in the 1 state for more than a couple of seconds. If it is, please reset the connection and scan the QR again

***

### Delivered to WhatsApp

<div className="flex gap-2 items-center">
  `ack: 2`

  <div className="bg-white w-7 h-7 items-center flex justify-center rounded-md">
    <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
      <path d="M2 12l5 5 10-10" fill="none" stroke="#6b7280" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />

      <path d="M7 12l5 5 10-10" fill="none" stroke="#6b7280" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
    </svg>
  </div>
</div>

Message was delivered to the WhatsApp servers, but is awaiting delivery confirmation from all recipients

**What this means:**

* For individual chats: Awaiting delivery confirmation from the recipient
* For group chats: The message has been delivered to at least one participant (but not necessarily all), but awaiting delivery confirmation from the rest. Check `delivery_info.delivered_count` for the exact number of participants who received it

***

### Delivered to all recipients

<div className="flex gap-2 items-center">
  `ack: 3`

  <div className="bg-white w-7 h-7 items-center flex justify-center rounded-md">
    <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
      <path d="M2 12l5 5 10-10" fill="none" stroke="#6b7280" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />

      <path d="M7 12l5 5 10-10" fill="none" stroke="#6b7280" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
    </svg>
  </div>
</div>

Message was delivered to all recipients

**What this means:** For private chats, it was delivered to the recipient. For group chats, all group participants have received the message on their devices

***

### Read by all

<div className="flex gap-2 items-center">
  `ack: 4 or 5`

  <div className="bg-white w-7 h-7 items-center flex justify-center rounded-md">
    <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
      <path d="M2 12l5 5 10-10" fill="none" stroke="#3b82f6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />

      <path d="M7 12l5 5 10-10" fill="none" stroke="#3b82f6" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
    </svg>
  </div>
</div>

Message was read (or played in case of audio/video messages) by all the recipients (blue double tick).

**What this means:**

* For individual chats: The message has been read by the recipient. This status will typically appear only if the recipient has read receipts enabled in their WhatsApp privacy settings.

## Understanding Group Chat Delivery

For group chats, the `ack` value provides a summary status, but the `delivery_info` object in the message payload contains detailed statistics:

* `delivered_count`: Number of participants who have received the message
* `read_count`: Number of participants who have read the message

**Example:**

* A group with 10 participants might have `ack: 2` (delivered to at least one) but `delivery_info.delivered_count: 7` (delivered to 7 participants)
* The `ack` value will increase to `3` only when all participants have received it

## Troubleshooting

### Message Stuck at Status 0 or 1

* Check your phone connection status
* Try restarting your phone on Periskope
* Ensure that WhatsApp on your phone is updated to the latest version
* Verify your internet connection is stable

### Message Failed (Status -1)

* Ensure that WhatsApp on your phone is updated to the latest version
* Verify the recipient's phone number is correct and not formatted incorrectly
* Check if the recipient has blocked your number
* Try restarting your phone on Periskope
* For group chats, verify the group still exists and your number hasn't been removed

### ACK Status Not Advancing

* ACK values are monotonic (they never decrease)
* If a message shows `ack: 2` for a long time, it may mean:
  * The recipient hasn't read it yet (for individual chats)
  * Not all group participants have read it (for group chats)
  * Read receipts are disabled
* Network issues or WhatsApp server delays can also cause status updates to be delayed

## API Integration

When integrating with Periskope's API, these status codes are returned as integers in the message object's `ack` field.

**For group chats**, also check the `delivery_info` object:

```json theme={null}
{
  "ack": 2,
  "delivery_info": {
      "read": {
          "919537851844@c.us": 1737976090690
      },
      "pending": [],
      "delivered": {
          "919537851844@c.us": 1737976082277
      },
      "read_count": 1,
      "delivered_count": 1
  }
}
```

You can use these values to build custom notification systems or delivery tracking in your applications.

## Webhook Integration

You can track acknowledgment status changes in real-time using the [`message.ack.updated`](/api-reference/webhooks/message.ack.updated) webhook event, which fires whenever a message's acknowledgment status changes.

The webhook payload will include both the `ack` value and, for group chats, the updated `delivery_info` with current counts.
