Rate Limiting
WhatsApp enforces rate limits that can result in temporary bans if exceeded. There are no officially published limits, but the community has observed these approximate thresholds:
- Messages: ~50-80 messages per minute for individual chats, lower for new/unverified numbers
- Group operations: Creating groups, adding participants, and modifying settings are more tightly limited
- Media uploads: Slower rate limit than text messages; large files count more heavily
- Contact checks (
isOnWhatsApp): ~50 numbers per request, batched automatically by whatsmeow - Newsletter operations: Lower limits than regular messaging
Safe Sending Pattern
async function sendWithBackoff(
client: WhatsmeowClient,
messages: Array<{ jid: string; text: string }>
) {
for (const { jid, text } of messages) {
try {
await client.sendMessage(jid, { conversation: text });
} catch (err) {
if (err instanceof WhatsmeowError && err.code === "ERR_SEND") {
await new Promise((r) => setTimeout(r, 5000));
await client.sendMessage(jid, { conversation: text });
} else {
throw err;
}
}
// Space out messages: 1-3 seconds between sends
await new Promise((r) => setTimeout(r, 1000 + Math.random() * 2000));
}
}
General Guidance
- Space out messages (1-3 seconds between sends)
- Avoid bulk operations on new/freshly paired numbers
- Handle
temporary_banevents — they include an expiry time - Monitor
stream_errorandkeep_alive_timeoutevents as early warning signs - Use
sendPresence("available")before sending to simulate normal client behavior