Contents

Using the API well

Rate limits

Limits keep one integration from slowing down everyone else. They are token buckets: you can burst above the steady rate for a moment, and every response tells you how much room is left.

The limits

ScopeSteady rateBurstApplies to
key50 requests/s100Each API key.
account100 requests/s, or your plan’s rate2 × the rateAll keys and users of one account together.
sender-management20 requests/s40Registering numbers, display names and WhatsApp Business Account changes (WhatsApp meters these itself).
campaign-create5 requests/s10Creating campaigns.

The sandbox allows 10% of your plan’s account rate. Sending speed to WhatsApp is a separate matter: each number has its own throughput set by WhatsApp, and messages above it wait in the queue (queuedReason) instead of failing.

Headers on every response

response headers
RateLimit-Limit: 100
RateLimit-Remaining: 97
RateLimit-Reset: 1
RateLimit-Policy: 100;w=2;scope=key, 200;w=2;scope=account

RateLimit-Limit, -Remaining and -Reset (seconds) describe the tightest limit for this request; RateLimit-Policy lists each limit that applied, as <burst>;w=<window seconds>;scope=<name>.

When you hit a limit

The API answers 429 with RATE_LIMITED, a Retry-After header and retryAfterSeconds in the body. Wait that long, then retry with the same Idempotency-Key. The SDKs do this automatically. To stay under the limits, spread bulk work over time, or use campaigns, which pace sending for you.