Skip to content
Beta — the Waasl API is in private beta. Endpoints marked Coming soon are designed but not live yet. Request early access

Rate limits

Limits apply per workspace across all its keys. Every response reports where you stand:

RateLimit-Limit: 600
RateLimit-Remaining: 587
RateLimit-Reset: 41
Bucket Limit
All requests 600 / minute
POST /messages, POST /conversations/{id}/messages 50 / second
POST /contacts/import 10 / minute
POST /broadcasts 10 / hour
Analytics 60 / minute

When you exceed a limit you get 429 rate_limited with a Retry-After header in seconds. Back off for at least that long, with jitter.

async function withRetry(fn, attempts = 5) {
for (let i = 0; ; i++) {
const res = await fn();
if (res.status !== 429 && res.status < 500 || i === attempts - 1) return res;
const wait = Number(res.headers.get("retry-after") ?? 2 ** i);
await new Promise((r) => setTimeout(r, wait * 1000 + Math.random() * 250));
}
}

WhatsApp’s own limits apply too. Meta caps how many new customers each number may message per 24 hours by messaging tier (1K → 10K → 100K → unlimited). Waasl paces broadcasts to stay inside your tier. Need more API throughput? Talk to us.