# How WhatsApp sending works

The path of an outgoing WhatsApp message, from the queue and its lanes to pacing, retries, expiry, quarantine and uncertain delivery, and what stops a message on purpose.

Nothing leaves the moment you click: every outgoing message enters a queue, and one job sends from it at a human pace, line by line, because a number that sends too fast risks being blocked.

## From the queue to the phone {#path}

A new message is **Queued** on a line: the company's default line while it is connected, otherwise the first connected line of the company; a template sent on a schedule uses its own **Account**. Automatic messages queue even when no line is connected, and move to a line of the same company as soon as one connects.

The job **WhatsApp: Dispatch Outbox** sends them one at a time per line, by priority, then by planned time. It runs every minute and is woken as soon as a message is queued; a reply typed in Discuss leaves at once when the pace allows. The message turns **Sending** during the call, **Sent** when the line accepts it, then **Delivered**, **Read** and **Replied** as WhatsApp reports back. [Follow your messages](follow-your-messages) shows each status.

## Lanes {#lanes}

Each message travels in a lane that sets its pace:

| Lane | Carries | Gap between two messages | Per hour |
|---|---|---|---|
| **Interactive** | Discuss replies, the Send dialog with one recipient | 3 to 6 seconds | 120 |
| **Notification** | Templates sent on an event or a schedule | 5 to 12 seconds | 150 |
| **Bulk** | The Send dialog with several recipients, every **Marketing** template | 12 to 30 seconds, a 12-minute break every 40 messages | 200 |

The first two show the recipient a typing indicator before the message. A fourth lane, the fastest, is kept for verification codes.

## Pacing {#pacing}

Above the lanes, each line respects ceilings of its own: at least 6 seconds between any two messages, 12 a minute, 300 an hour. The notification and bulk lanes also each have a daily cap, counted separately: the line's **Rate Limit Daily** (1,000 by default), reached step by step while the line warms up, 40 on the first day and 30 more each day. When **Rate Limit Daily** is 0, the cap follows the line's age instead: 150 for a line under 10 days old, 400 under 30 days and 800 after. A number never contacted before, without a contact record or an earlier exchange, counts against a smaller daily cap; past it, the message waits six hours. When the same text goes to several people within an hour, an invisible character or a final space keeps the copies from being identical; **Authentication** templates and those with **Forbid Variation** are sent word for word.

These limits, the line's trust tier and the optional quiet hours of the bulk lane show on the line's form in developer mode.

## Retries {#retries}

When the line refuses a message, the reason decides:

- the number is not on WhatsApp: **Bounced**, never retried;
- a network error or a timeout: **Delivery Uncertain** (below);
- any other failure: back to **Queued**, tried again after about 30 seconds, then 1 and 2 minutes. A fourth failure makes it **Dead Letter**.

A rate limit pauses the line for 30 minutes. **Retry** sends a failed message again by hand.

## Expiry {#expiry}

A template's **Queue Time-to-Live (min)** sets how long its messages may wait. With `-1`, the value of business documents, they wait forever. Otherwise a message still queued that many minutes after its planned time turns **Expired** and is never sent late: a hearing reminder that misses its hour is worse than none. The ready-made reminders use it: 45 minutes for **Calendar: Reminder**, 90 for **Cases: Hearing Reminder (1 hour before)**, 12 hours for the daily lists.

## Quarantine {#quarantine}

When a line looks blocked, sending from it stops. That happens when account errors are confirmed by a live test of the line (24 hours, then 48, 96 and up to 7 days for repeats), or after 4 disconnections within 15 minutes (one hour). The line's chatter records an alert and each user notified by the line receives a warning activity. Every hour a job releases the line once it answers or its time is up; it then warms up again from 40 messages a day. Messages wait **Queued** meanwhile.

Lighter brakes work the same way: more than 35% failures over at least 10 attempts in an hour pauses the line 15 minutes, and 14 days without sending restart the warm-up.

## Uncertain delivery {#uncertain}

A timeout during the call leaves the doubt: the message may have left. It turns **Delivery Uncertain**, and every 10 minutes a job asks the line whether it holds it. Found, it becomes **Sent**; not found, it is queued again; when the line cannot answer, the job asks again later, waiting longer each time. After 8 unanswered checks it becomes **Dead Letter** and is never resent alone: a duplicate cannot be taken back. A message left **Sending** by a server stop turns uncertain after 5 minutes.

## Consent and suppressed recipients {#suppressed}

Just before sending, without using a slot, the blacklist and consent are checked: a listed number, or a marketing message without consent, turns **Suppressed**. An automatic message on an event to a listed number is not created at all. A message to an archived contact is suppressed at once. [Consent and blacklist](consent-and-blacklist) explains both.

## What sending does not do {#limits}

- It does not send a template's header, footer or buttons.
- It does not read the **Max Retries** and **Default Priority** settings ([WhatsApp settings](whatsapp-settings)).
- It does not resend a **Dead Letter**, **Bounced** or **Suppressed** message by itself.

[WhatsApp automations](whatsapp-automations) lists the jobs named here.

---

- Source: https://jaah.app/docs/whatsapp/how-whatsapp-sending-works
- Updated: 2026-10-27
- Version: WhatsApp 19.0.2.3.9
